国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue2.0 多 Tab切換組件的封裝實例

2019-11-19 15:57:38
字體:
供稿:網(wǎng)友

Vue2.0 多 Tab切換組件簡單封裝,滿足自己簡單的功能,可以直接拿去使用!

首先上效果圖:

功能簡單介紹:

1、支持tab切換

2、支持tab定位

3、支持tab自動化

仿React多Tab實現(xiàn),總之可以正常使用滿足日常需求,

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頁面標(biāo)題就是 div 中的name值,倆面是內(nèi)容,也可以是子組件。

接下來展示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;    /*動畫持續(xù)的時間長*/    -webkit-animation-iteration-count: 1;    /*動畫循環(huán)播放的次數(shù)為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方法介紹

主要是用于隱藏內(nèi)容容器的

3、tabswitch方法

用來切換組件容器的顯示的頁面!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 独山县| 睢宁县| 东丽区| 兴安县| 唐海县| 准格尔旗| 荥经县| 德阳市| 泰和县| 临夏县| 永安市| 六枝特区| 牡丹江市| 南江县| 南郑县| 涟水县| 保德县| 房产| 什邡市| 志丹县| 高邮市| 平昌县| 漯河市| 宜兰市| 海丰县| 抚顺市| 乐业县| 托克托县| 湟源县| 张家港市| 安丘市| 深水埗区| 南通市| 阿尔山市| 蕲春县| 八宿县| 西平县| 高尔夫| 黄冈市| 株洲市| 南充市|