原生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 的 v-model用法实例
Nov 23 Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 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 ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
详解php协程知识点
2018/09/21 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
jquery索引在使用中的一些困惑
2013/10/24 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
一则python3的简单爬虫代码
2014/05/26 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
python读取指定字节长度的文本方法
2019/08/27 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
2020/01/25 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
HTML5 与 XHTML2
2008/10/17 HTML / CSS
优秀员工评语
2014/02/10 职场文书
学生犯错保证书
2015/05/09 职场文书
医院员工辞职信范文
2015/05/12 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python