原生JS封装vue Tab切换效果


Posted in Vue.js onApril 28, 2021

本文实例为大家分享了原生JS封装vue Tab切换的具体代码,供大家参考,具体内容如下

先看效果图

原生JS封装vue Tab切换效果

使用的技术

vue,js,css3

vue组件 可以直接使用

<template>
  <div class="bookcircle-header">
    <ul class="wrapper" :class="headerActive == 0 ? 'friend' : 'booklist'">
      <li @click="headerChange(0)" :class="headerActive == 0 ? 'active' : ''">
        书友
      </li>
      <li @click="headerChange(1)" :class="headerActive == 1 ? 'active' : ''">
        书单
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      headerActive: 0,
    };
  },
  computed: {},
  created() {},
  mounted() {
    //初始化抛发
    this.$emit("change", this.headerActive);
  },
  methods: {
    headerChange(index) {
      this.headerActive = index;
      this.$emit("change", index);
    },
  },
};
</script>

<style lang="less" scoped>
.bookcircle-header {
  height: 42px;
  display: flex;
  justify-content: center;
  align-items: center;
  .wrapper {
    width: 286px;
    font-size: 14px;
    height: 29px;
    color: #1489fe;
    border: 1px solid #1489fe;
    border-radius: 14px;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
    box-sizing: border-box; // 解决边框溢出,将border包含在盒子内部
    li {
      flex: 1;
      height: 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      z-index: 2;
    }
    .active {
      color: white;
    }
    &::before {
      content: "";
      width: 143px;
      height: 100%;
      background-color: #1489fe;
      position: absolute;
      top: 0px;
      left: 0px;
      border-radius: 13px 0px 0px 13px;
      z-index: 1;
      transition: all 0.3s;
    }
    &.firend::before {
      transform: translateX(0);
      border-radius: 13px 0px 0px 13px;
    }
    &.booklist::before {
      transform: translateX(100%);
      border-radius: 0px 13px 13px 0px;
    }
  }
}
</style>

实现原理:

使用ul,li以及弹性盒子,首先给父元素设置宽高,然后通过弹性盒子将子元素 li 水平方向展开, 给子元素 li 设置 flex:1,让子元素平分父元素的宽。

然后给父元素设置伪元素,以绝对定位的方式覆盖第一个 li 元素, 通过z-index属性,控制伪元素和子元素的层级显示关系。

然后给伪元素设置 transition 属性 搭配 transform: translateX(); 属性,让元素水平移动就可以了

注意点:

1、虽然切换的点击事件在子元素上,并且也给子元素添加 了active样式,但tab的切换效果并不是通过子元素来实现的,而是通过父元素的伪元素来实现切换效果。
2、必须要根据子元素的 index 给父元素设置动态class, 这样父元素的伪元素才能根据选中的子元素执行切换动画
3、本组件使用的是 淘宝amfe-flexible、 postcss适配,使用时注意适配问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
vue3.0+vue-router+element-plus初实践
Dec 02 Vue.js
vue使用element-ui实现表单验证
Dec 13 Vue.js
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue项目两种方式实现竖向表格的思路分析
vue首次渲染全过程
浅谈vue2的$refs在vue3组合式API中的替代方法
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
vue backtop组件的实现完整代码
vue中三级导航的菜单权限控制
Mar 31 #Vue.js
vue3中的组件间通信
You might like
PHP禁止个别IP访问网站
2013/10/30 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
教你php如何实现验证码
2016/01/20 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
python多进程读图提取特征存npy
2019/05/21 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
new修饰符是起什么作用
2015/06/28 面试题
称象教学反思
2014/02/03 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
金融事务专业求职信
2014/04/25 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
《青山不老》教学反思
2016/02/22 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript