Vue 2.0 다 중 Tab 전환 구성 요소 의 패키지 인 스 턴 스

6966 단어 VueTab전환 하 다.
Vue 2.0 멀 티 탭 전환 구성 요 소 는 간단 한 패키지 로 자신의 간단 한 기능 을 만족 시 키 고 직접 가 져 가서 사용 할 수 있 습 니 다!
우선 위의 효과 그림:

기능 소개:
1.탭 전환 지원
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 방법
구성 요소 용기 의 표시 페이지 를 전환 합 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기