Vue2.0 多 Tab切换组件的封装实例
发布时间 - 2026-01-11 02:33:14 点击率:次Vue2.0 多 Tab切换组件简单封装,满足自己简单的功能,可以直接拿去使用!

首先上效果图:
功能简单介绍:
1、支持tab切换
2、支持tab定位
3、支持tab自动化
仿React多Tab实现,总之可以正常使用满足日常需求,
1、使用方法:
==index.vue文件==
<TabItems>
<div name="买入" class="first">
<Content :isContTab = "0" />
</div>
<div name="自动再平衡" class="second">
<Content :isContTab = "1" />
</div>
<div name="一键卖出" class="three">
<Content :isContTab = "2" />
</div>
</TabItems>
PS:TabItems是我的TabSwitch组件,tab页面标题就是 div 中的name值,俩面是内容,也可以是子组件。
接下来展示TabItems组件
2、组件
index.less文件
body,html {margin: 0;}
* {
opacity: 1;
-webkit-backface-visibility: hidden;
}
.tabItems {
.Tab_tittle_wrap {
position: absolute;
width: 100%;
top: 0;
z-index: 2;
background: @ffffff;
display: -webkit-box;
height: 80px;
line-height: 80px;
text-align: center;
color: @222222;
border-bottom: 1px solid rgba(46, 177, 255, 0.08);
box-shadow: 0px 0px 25px 6px rgba(46, 177, 255, 0.21);
span {
display: block;
text-align: center;
width: 26%;
margin: 0 24px;
font-size: 26px;
position: relative;
i {
display: inline-block;
position: absolute;
width: 1px;
height: 50px;
top: 15px;
right: -24px;
background: @dddddd;
}
&:last-child {
i {
display: none;
}
}
}
.router-link-active {
color: #8097f9;
border-bottom: 1px solid #8097f9;
}
}
.Tab_item_wrap {
position: absolute;
top: 82px;
width: 100%;
z-index: 0;
background: @ffffff;
bottom: 0;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
}
.showAnminous {
opacity: 1;
-webkit-backface-visibility: hidden;
-webkit-animation-name: "rightMove";
/*动画名称,需要跟@keyframes定义的名称一致*/
-webkit-animation-duration: .3s;
/*动画持续的时间长*/
-webkit-animation-iteration-count: 1;
/*动画循环播放的次数为1 infinite为无限次*/
}
}
@-webkit-keyframes rightMove {
0% {
-webkit-transform: translate(110%, 0);
}
100% {
-webkit-transform: translate(0, 0);
}
}
@-ms-keyframes rightMove {
0% {
-ms-transform: translate(110%, 0);
}
100% {
-ms-transform: translate(0, 0);
}
}
@keyframes rightMove {
0% {
-webkit-transform: translate(110%, 0);
-ms-transform: translate(110%, 0);
transform: translate(110%, 0);
}
100% {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
transform: translate(0, 0);
}
}
TabItems.vue
<template>
<div class="tabItems">
<div class="Tab_tittle_wrap" @click="tabswitch">
<span v-for="(v,i) in tabTitle" :style="{width:(100/tabTitle.length-7.5)+'%'}" :class="isShowTab==i?'router-link-active':''">{{v}}<i></i></span>
</div>
<div class="Tab_item_wrap">
<slot></slot>
</div>
</div>
</template>
<style lang="less">
@import "./less/index";
</style>
<script>
export default {
data() {
return {
tabTitle: [],
isShowTab: 0,
}
},
created: function() {
let is = sessionStorage.getItem("isTabShow");
if(is) {
this.isShowTab = is;
} else {
let URL = libUtils.GetURLParamObj();
this.isShowTab = URL.isShowTab ? URL.isShowTab : "0";
}
setTimeout(function() {
this.tabswitch(document.querySelector(".Tab_tittle_wrap").children[this.isShowTab].click());
}.bind(this), 0);
},
mounted() {
let slot = this.$slots.default;
for(let i = 0; i < slot.length; i++) {
if(slot[i].tag == "div") {
this.tabTitle.push(slot[i].data.attrs.name);
if(slot[i].elm) {
slot[i].elm.className = "hide";
if(this.isShowTab == i) {
slot[i].elm.className = "";
}
};
}
}
},
methods: {
tabswitch() {
if(!event) return;
let target = event.target;
if(target.nodeName.toLowerCase() !== 'span') {
return;
}
let len = target.parentNode.children;
for(let i = 0; i < len.length; i++) {
len[i].index = i;
len[i].removeAttribute('class');
}
target.setAttribute('class', 'router-link-active');
this.isShowTab = target.index;
//tabItems
let child = this.$el.children[1].children;
for(let k = 0; k < child.length; k++) {
child[k].className = "hide";
if(k == target.index) {
child[k].className = "showAnminous";
}
}
try {
sessionStorage.setItem("isTabShow", target.index);
} catch(err) {
console.log(err);
}
}
}
}
</script>
PS:
created、mounted这两个方法不需要过多介绍,Vue生命周期
1、created方法介绍。
获取浏览器链接地址:libUtils.GetURLParamObj();获取浏览器链接地址的
created这个方法主要是用来定位tab具体显示哪个页面的
2、mounted方法介绍
主要是用于隐藏内容容器的
3、tabswitch方法
用来切换组件容器的显示的页面!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
如何快速生成橙子建站落地页链接?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
LinuxShell函数封装方法_脚本复用设计思路【教程】
Linux网络带宽限制_tc配置实践解析【教程】
EditPlus中的正则表达式实战(5)
利用JavaScript实现拖拽改变元素大小
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
如何在宝塔面板中创建新站点?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Android Socket接口实现即时通讯实例代码
高端企业智能建站程序:SEO优化与响应式模板定制开发
Linux系统命令中tree命令详解
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
5种Android数据存储方式汇总
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
linux写shell需要注意的问题(必看)
zabbix利用python脚本发送报警邮件的方法
如何为不同团队 ID 动态生成多个独立按钮
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
java中使用zxing批量生成二维码立牌
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何用AWS免费套餐快速搭建高效网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
微信小程序 闭包写法详细介绍
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
北京网站制作的公司有哪些,北京白云观官方网站?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
进行网站优化必须要坚持的四大原则
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
公司门户网站制作流程,华为官网怎么做?
如何快速搭建高效WAP手机网站?
如何在腾讯云服务器上快速搭建个人网站?
javascript中的try catch异常捕获机制用法分析
如何在Windows虚拟主机上快速搭建网站?
如何用景安虚拟主机手机版绑定域名建站?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
JavaScript实现Fly Bird小游戏
下一篇:《timetree》删除日程方法
下一篇:《timetree》删除日程方法

