原生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项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
三种方式清除vue路由跳转router-link的历史记录
Apr 10 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 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执行速度全攻略
2006/10/09 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
一个javascript图片阅览组件
2010/11/09 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
Django User 模块之 AbstractUser 扩展详解
2020/03/11 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
函授毕业生自我鉴定
2013/11/06 职场文书
自强之星事迹材料
2014/05/12 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
财务负责人岗位职责
2015/02/03 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书