Vue2.0 多 Tab切换组件的封装实例
程序员文章站
2022-05-14 19:53:37
vue2.0 多 tab切换组件简单封装,满足自己简单的功能,可以直接拿去使用!
首先上效果图:
功能简单介绍:
1、支持tab切换
2、支持tab定位
3、...
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方法
用来切换组件容器的显示的页面!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。