1. 程式人生 > >tab選項卡自動定位中間

tab選項卡自動定位中間

這裡寫圖片描述

  • nav.vue
<template>
  <div>
    <div class="topic-list-inner">
      <div class="nav" ref="nav">
        <div class="box" v-for="(item,index) in list" @click="queryTopic(item,index)">
          <div class="item" :class="{active:navActiveIndex==index}">{{item.title
}}
</div> </div> </div> <div class="nav-right-arrow rotateUp" @click="openTagModal(list)"> <img src="./images/drop-down.png" alt="" class="drop-down" :class="{reverse:showModal}"> </div> <!-- use the modal component, pass in the prop -->
<modal-tag v-if="showModal" @close="showModal = false" :query="queryTopic" :my-tag="selectTag" :active-index="navActiveIndex" ></modal-tag> <!--傳遞子元件的方法,引數--> <!--queryTopic:方法--> <!--selectTag:資料--> </div> </div
>
</template> <script> import modalTag from 'components/navModal/navModal.vue'; import AutoScroll from 'assets/script/autoScroll' let autoScrollInstance = null //關鍵點:在載入的外掛之前的就要定義個變數的,如果定在data中 ,則會報錯 export default { name: 'navScroll', data() { return { list: [ //自己定義的假資料,實際是獲取的資料 {title: 'AAAA', id: 1}, {title: 'BBBB', id: 2}, {title: 'CCCC', id: 3}, {title: 'DDDD', id: 4}, {title: 'EEEE', id: 5}, {title: 'FFFF', id: 6}, {title: 'HHHH', id: 7}, {title: 'MMMM', id: 8}, {title: 'RRRR', id: 9}, {title: 'QQQQ', id: 10}, {title: 'UUUU', id: 11}, {title: 'TTTT', id: 12}, {title: 'NNNN', id: 13}, {title: 'OOOO', id: 14}, {title: 'PPPP', id: 15}, {title: 'ZZZZ', id: 16}, ], navActiveIndex: 0, //當前高亮的tab選項卡index showModal: false, //是否顯示modal selectTag: null, //傳遞個子元件(modal)的資料的 } }, methods: { // queryTopic(data, index) { //點選誰,誰就高亮 ,定一個變數,click事件的賦值使其相等,而在:class 中 判斷是否相等,即可 this.navActiveIndex = index; //外掛的調取方法 if (autoScrollInstance) { //確保的外掛載入成功 autoScrollInstance.scrollTo(this.$refs.nav.childNodes[index]) } }, //點選modal的事件 openTagModal(tag) { event.stopPropagation() //點選箭頭,阻止事件向下傳遞 this.showModal = true //modal的出現 this.selectTag = tag; //傳值給modal子元件 }, }, components: { 'modal-tag': modalTag, //元件 }, mounted() { //寫在掉介面的裡面的 this.$nextTick(() => { autoScrollInstance = new AutoScroll(this.$refs.nav, {spaceBetween: 0})//節點 nav }) } } </script> <style lang="scss" scoped> .topic-list-inner { width: 100%; position: fixed; top: 0; left: 0; background: #fff; } .nav { display: flex; width: 7rem; overflow-x: auto; overflow-y: hidden; .box { white-space: nowrap; font-size: 0.3rem; padding: 0 0.3rem; height: 0.9rem; line-height: 0.9rem; color: #333333; .item { height: 100%; &.active { color: #fe3e62; border-bottom: 1.5px solid #fe3e62; } } } } .nav-right-arrow { position: fixed; right: 0; top: 0; width: 1rem; height: 0.9rem; /*background: #fff;*/ background-image: linear-gradient(to right, rgba(#fff, 0), #fff 30%, #fff); display: flex; align-items: center; justify-content: center; .drop-down { width: 0.22rem; /*padding-top: 0.35rem;*/ /*margin-left: 0.22rem;*/ transform: rotate(0deg); transition: all 0.5s; &.reverse { transform: rotate(-180deg); } } } </style>
  • navModal.vue
<template>
  <transition name="modal">
    <div class="modal-mask" @click="$emit('close')">
      <div class="modal-wrapper">
        <div class="modal-container cf">
          <div v-for='(list,index) in myTag' class="list-title"
               @click="query(list,index)"
               :class="{active:activeIndex===index}">
            {{list.title}}
          </div>
        </div>
      </div>
    </div>
  </transition>
</template>

<script type="text/babel">

  export default {
    props: ['myTag', 'activeIndex', 'query'], //接受父元件 方法 資料
    data() {
      return {
        navActiveIndex: 0, //初始化預設
      }
    },
    mounted() {

    },
    methods: {}

  }
</script>
<style scoped lang="scss">

  .modal-mask {
    position: fixed;
    z-index: 9998;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    /*background-color: rgba(0, 0, 0, .5);*/
    /*display: table;*/
    transition: opacity .3s ease;
  }

  .modal-wrapper {
    /*display: table-cell;*/
    /*vertical-align: middle;*/
    padding-top: 0.91rem;
  }

  .modal-container {
    width: 100%;
    margin: 0 auto;
    background-color: #fff;
    /*box-shadow: 0 2px 8px rgba(0, 0, 0, .33);*/
    transition: all .3s ease;
    padding: 0 0.1rem 0.4rem 0.22rem;
    font-family: Helvetica, Arial, sans-serif;
    .list-title {
      color: #666;
      border-radius: 4px;
      font-size: 0.26rem;
      border: 1px solid #999;
      height: 0.57rem;
      width: 1.93rem;
      text-align: center;
      float: left;
      line-height: 0.57rem;
      margin: 0.4rem 0.2rem 0 0.2rem;
      &.active {
        color: #fe3e62;
        border: 1.5px solid #fe3e62;
      }
    }
  }

  .myTagClose {
    color: #fff;
    font-size: 0.6rem;
    margin: 0.4rem auto 0 auto;
    height: 1rem;
    width: 1rem;
    text-align: center;
  }

  .modal-default-button {
    float: right;
  }

  .modal-enter {
    opacity: 0;
  }

  .modal-leave-active {
    transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
  }

  .modal-enter .modal-container,
  .modal-leave-active .modal-container {
    transform: translateY(-0.9rem);
    opacity: 0;
  }
</style>
  • autoScroll.js
export default function autoScroll(dom,options){
  var options=options||{};
  var defaults={
    spaceBetween:15,
    duration:600,
  };
  var settings = $.extend( {}, defaults, options );



  var $container = $(dom);

  var $item = $container.children();
  $item.css({
    margin:"0 0"
  });
  $item.first().css({
    "margin-left":"0"
  });
  $item.last().css({
    "margin-right":"0"
  });
  var _this=this;
  var cW = $container.outerWidth();
  $item.on('click',function(){
    scrollTo(this);
  });


  this.scrollTo=function(dom){
    scrollTo(dom);
  };

  function scrollTo(dom){
    //console.log($container.get()[0].scrollWidth);
    //console.log($(this).position().left);
    var itemPL=$(dom).position().left;
    var containerSl=$container.scrollLeft();

    var itemW=$(dom).outerWidth();

    var containerW=$container.outerWidth();
    //console.log(containerW)
    //var d=$container.scrollLeft();

    //$container.animate({scrollLeft: itemPL+containerSl-containerW/2+itemW/2}, 800);
    $container.animate({scrollLeft: itemPL+settings.spaceBetween+containerSl-containerW/2+itemW/2}, settings.duration);
  }


}

相關推薦

tab選項自動定位中間

nav.vue <template> <div> <div class="topic-list-inner"> <div

Tab選項 自動切換效果js實現

one asc hidden abs 公告 turn get 實現 pla try.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <

用angular中的ng-repeat和ng-show來實現tab選項

new angular lis content padding col ora ack 顯示 雖然我們可以用angular中的路由來做tab選項卡,但是那會讓我們建立很多的頁面來引入,或者建立 <script type="text/ng-template" id="n

自創簡易CSS Tab 選項

選中 dem top ive load fun .cn click 綜合 前段時間我註冊了 w3c.run域名,打算做一個W3C相關技術在線試驗工具。沒錯,就是在線編寫html、css、js代碼然後在線運行,查看效果。 在設計首頁時,我打算首頁提供三個代碼編輯器,介於界面大

原生JS畫的tab選項

記錄 bsp back height 原生js .class lis get function 記錄一下原生js寫的tab選項卡 鼠標滑入可以切換圖片 離開之後自動切換 <!DOCTYPE html> <html lang="en"> &l

Tab選項 延遲切換效果js實現

ext 0ms 分享 規則 .get 內容 char out try try.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t

一個頁面多個tab選項效果

結果 菜鳥 提升 ref -a 搜索引擎 flow .cn www. 新整理同一個頁面多個tab選項卡,由於不會自己些代碼,只能從網上找現成的來改。留著備用。 共3部分,HTML、CSS、JS 暫時沒有演示地址和下載地址,以後會補上。 HTML部分 <!DOCTY

使用jq實現tab選項

選項卡 mov 選項 function spa color fun () dex jq代碼 $(‘#fenlei_title span‘).click(function() { $("#fenlei_title span").eq($(this).

tab選項動態滑動效果

ref nav css引入 選項 important script 滑動效果 tab選項卡 port css引入:style.css 樣式可自己更改 html 結果和class: <div class="navBar"> <ul

layui 的Tab選項

申請 www. yui TE http bbr -s pre clas http://www.layui.com/doc/element/tab.html <#--start--> <div class="layui-tab layui-tab-

AxureRP分頁簽 / Tab選項切換功能~

info 雙擊 加背景 編輯 alt idt 拖動 選項卡切換 調整 最終結果圖如下: 實現過程: 1、從元件庫中拖一個動態面板,調整所需大小,接下來的步驟都通過雙擊動態面板來完成。 2、雙擊動態面板,彈出框“面板狀態管理”,新建狀態並命名。此處新建了TAB1、TAB2、T

vue tab選項

border ear cti cdn none box line use port <!DOCTYPE html> <html> <head> <meta charset="utf-8" />

Tab選項

message mes 分享 present data tab選項卡 選項 ria tin <div> <ul class="nav nav-tabs" role="tablist"> <li role="presentation"

DOM操作相關案例 模態對話框,簡易留言板,js模擬選擇器hover,tab選項,購物車案例

order 選擇器 點擊 ttr 選擇 this 鼠標懸停 pos 清空 1.模態框案例 需求: 打開網頁時有一個普通的按鈕,點擊當前按鈕顯示一個背景圖,中心並彈出一個彈出框,點擊X的時候會關閉當前的模態框 代碼如下: <!DOCTYPE html> &l

layui從子iframe打開父iframe的tab選項

link script frame manage ++ name 父iframe jquer con 數據表格字段: {field: ‘novelId‘, title: ‘小說ID‘,width:100,templet: ‘<div><a href="ja

JavaScript插件制作-tab選項

++ doctype 500px clear win remove 制作 getattr hover JavaScript插件制作練習-鼠標劃過選項卡切換圖片 <!DOCTYPE html> <html> <head>

Axure RP7.0製作Tab選項

1.建立一個命名為Tab的動態面板,新增兩個state 2.在state1中新增如下圖元件,並且在“新聞資訊”的按鈕上新增事件,設定動態面板狀態為state2。為了區分,將按鈕樣式要設定不一樣。 3.在state2中新增如下圖元件,並且在“最新公告”的按鈕上新增事件,設

layui學習--tab選項

var element; var $; layui.use(['element','jquery'],function(){ element = layui.element, $ = layui.jquery; //監聽左側選單點選 element.on(

微信小程式-滾動Tab選項

前言:今天呢 給大家詳細講解一下滾動Tab選項卡:左右可滑動切換的效果,希望對大家做專案時候有用! 以前也遇到過這個,但是沒有做記錄。轉載來源於:https://www.jianshu.com/p/94849f9c2ff2 一、wxml結構 tab標題因一排八個,所以使用 scroll

小程式tab選項

  造輪子啦 ! 造輪子啦!!造輪子啦!!!重要的事情說三遍!!!! wxml: <view class='tab'> <view class='{{tag == index?"true":"false"}}' wx:for='{{4}}'