選項卡案例

 

 

 

 

一、 HTML 結構

`
   <div id="app">
       <div class="tab">
           <!-- tab欄 -->
           <ul>
               <li class="active">apple</li>
               <li class="">orange</li>
               <li class="">lemon</li>
           </ul>
             <!-- 對應顯示的圖片 -->
           <div class="current"><img src="img/apple.png"></div>
           <div class=""><img src="img/orange.png"></div>
           <div class=""><img src="img/lemon.png"></div>
       </div>
   </div>


`

二、 提供的數據

         list: [{
                   id: 1,
                   title: 'apple',
                   path: 'img/apple.png'
              }, {
                   id: 2,
                   title: 'orange',
                   path: 'img/orange.png'
              }, {
                   id: 3,
                   title: 'lemon',
                   path: 'img/lemon.png'
              }]

 

三、 把數據渲染到頁面

  • 把tab欄 中的數替換到頁面上數組

    • 把 data 中 title 利用 v-for 循環渲染到頁面上 app

    • 把 data 中 path利用 v-for 循環渲染到頁面上 性能

        <div id="app">
           <div class="tab">  
               <ul>
                     <!--  
                       一、綁定key的做用 提升Vue的性能
                       二、 key 須要是惟一的標識 因此須要使用id, 也可使用index ,
    index 也是惟一的
                       三、 item 是 數組中對應的每一項  
                       四、 index 是 每一項的 索引
                   -->
                      <li :key='item.id' v-for='(item,index) in list'>{{item.title}}</li>
                 </ul>
                 <div  :key='item.id' v-for='(item, index) in list'>
                       <!-- : 是 v-bind 的簡寫   綁定屬性使用 v-bind -->
                       <img :src="item.path">
                 </div>
           </div>
       </div>
    <script>
       new  Vue({
           // 指定 操做元素 是 id 爲app 的
           el: '#app',
               data: {
                   list: [{
                       id: 1,
                       title: 'apple',
                       path: 'img/apple.png'
                  }, {
                       id: 2,
                       title: 'orange',
                       path: 'img/orange.png'
                  }, {
                       id: 3,
                       title: 'lemon',
                       path: 'img/lemon.png'
                  }]
              }
      })

    </script>

     

四、 給每個tab欄添加事件,並讓選中的高亮

  • 4.1 、讓默認的第一項tab欄高亮this

    • tab欄高亮 經過添加類名active 來實現 (CSS active 的樣式已經提早寫好)spa

      • 在data 中定義一個 默認的 索引 currentIndex 爲 0 blog

      • 給第一個li 添加 active 的類名 索引

        • 經過動態綁定class 來實現 第一個li 的索引爲 0 和 currentIndex 的值恰好相等事件

        • currentIndex === index 若是相等 則添加類名 active 不然 添加 空類名圖片

  • 4.2 、讓默認的第一項tab欄對應的div 顯示 ip

    • 實現思路 和 第一個 tab 實現思路同樣 只不過 這裏控制第一個div 顯示的類名是 current

      <ul>
      <!-- 動態綁定class   有 active   類名高亮 無 active   不高亮-->
          <li  :class='currentIndex==index?"active":""'
              :key='item.id' v-for='(item,index) in list'
              >{{item.title}}</li>
     </ul>
    <!-- 動態綁定class   有 current 類名顯示 無 current 隱藏-->
     <div :class='currentIndex==index?"current":""'
         
          :key='item.id' v-for='(item, index) in list'>
           <!-- : 是 v-bind 的簡寫   綁定屬性使用 v-bind -->
           <img :src="item.path">
     </div>

    <script>
       new  Vue({
           el: '#app',
               data: {
                   currentIndex: 0, // 選項卡當前的索引 默認爲 0  
                   list: [{
                       id: 1,
                       title: 'apple',
                       path: 'img/apple.png'
                  }, {
                       id: 2,
                       title: 'orange',
                       path: 'img/orange.png'
                  }, {
                       id: 3,
                       title: 'lemon',
                       path: 'img/lemon.png'
                  }]
              }
      })

    </script>
  • 4.3 、點擊每個tab欄 當前的高亮 其餘的取消高亮

    • 給每個li添加點擊事件

    • 讓當前的索引 index 和 當前 currentIndex 的 值 進項比較

    • 若是相等 則當前li 添加active 類名 當前的 li 高亮 當前對應索引的 div 添加 current 當前div 顯示 其餘隱藏

          <div id="app">
             <div class="tab">
                 <ul>
                     <!-- 經過v-on 添加點擊事件   須要把當前li 的索引傳過去
      -->
                     <li v-on:click='change(index)'          
                         :class='currentIndex==index?"active":""'                  
                         :key='item.id'
                         v-for='(item,index) in list'>{{item.title}}</li>
                 </ul>
                 <div :class='currentIndex==index?"current":""'
                      :key='item.id' v-for='(item, index) in list'>
                     <img :src="item.path">
                 </div>
             </div>
         </div>

      <script>
         new  Vue({
             el: '#app',
                 data: {
                     currentIndex: 0, // 選項卡當前的索引 默認爲 0  
                     list: [{
                         id: 1,
                         title: 'apple',
                         path: 'img/apple.png'
                    }, {
                         id: 2,
                         title: 'orange',
                         path: 'img/orange.png'
                    }, {
                         id: 3,
                         title: 'lemon',
                         path: 'img/lemon.png'
                    }]
                },
                 methods: {
                     change: function(index) {
                         // 經過傳入過來的索引來讓當前的 currentIndex 和點擊的index 值 相等
                         // 從而實現 控制類名    
                         this.currentIndex = index;
                    }
                }
         
        })

      </script>
相關文章
相關標籤/搜索