原生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 elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
vue绑定class的三种方法
Dec 24 Vue.js
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
vue首次渲染全过程
Apr 21 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
vue-cli4.5.x快速搭建项目
May 30 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 Vue.js
ant design vue的form表单取值方法
Jun 01 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 基本语法格式
2009/12/15 PHP
php微信公众平台开发类实例
2015/04/01 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
js 居中漂浮广告
2010/03/21 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
python实现教务管理系统
2018/03/12 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
什么是Remote Module
2016/06/10 面试题
廉洁自律演讲稿
2014/05/22 职场文书
2015入党个人自传范文
2015/06/26 职场文书
公司员工培训管理制度
2015/08/04 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Vue的生命周期一起来看看
2022/02/24 Vue.js
我的收音机情缘
2022/04/05 无线电