栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > Vue.js

自制简单的Tabs(Vue)

Vue.js 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自制简单的Tabs(Vue)

老样子先上效果图

image

实现思路

我们依旧从界面与逻辑两方面下手

界面上

  1. 文字选中与未选中的状态

  2. 下方滑块的动画效果

逻辑上

  1. 文字选中样式的替换

  2. tab页的添加

  3. 滑块滑动的距离

具体实现步骤

界面部分

  1. 文字选中与未选中状态的样式,这里我们可以通过动态添加class来实现

  2. 动画效果我们用css3的transfrom属性即可完成
    核心代码如下

{{tab}}
.line-container {    
background: $themeColor;//scss变量用法    height: 0.1rem;    
width: 5%;    
transition-duration: 200ms;//动画持续时间}

逻辑部分
1.文字选中样式的替换,上文中已经进行了事件绑定,只需在方法中进行标量替换即可

clickTab(tab, index) { 
    this.checkTab = index;//标量替换
    this.$emit('changeTab', tab);//将目前选中的tab告诉父控件,实际开发中一般父控件中控制下方内容的展示 ...}

2.tab页的添加,这里我们得益于vue数据循环的方式,我们只需要将需要添加的tab加入到数组即可

tabs: ['精选', '话题', '关注']//这里为了简便,直接采用了字符串的方式,可以根据实际场景,传入对象等
  1. 滑块滑动的距离,因为我们已经添加了动画的持续时间,所以我们只需要关注于位移的距离即可。经过分析可得:滑块滑动的距离=当前选中的滑块*每块tab所占宽度+每块子tab所占的宽度的一半-滑块宽度的一半(为了居中),可能文字有点笼统

image

let documentWidth = document.body.clientWidth//屏幕宽度let tabLineWidth = $('.line-container').width()//滑块的宽度let tabWidth=documentWidth/tabs.length //tabs为tab数组let moveDistance = index * tabWidth + tabWidth * 0.5 - tabLineWidth * 0.5 //滑动记录计算,下标index从0开始对了,因为预先并不知道tabs的长度,所以子滑块的宽度是不固定的,这里我们需要在元素挂载完成后设置一下宽度$('.tab-item').width(`${this.documentWidth / this.tabs.length}`);



作者:信心123
链接:https://www.jianshu.com/p/daedc674ac09


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/241001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号