Tab選項卡

案例:Tab選項卡

 

 

實現步驟:html

  1. 實現靜態UI效果 vue

        用傳統的方式實現標籤結構和樣式編程

  2. 基於數據重構UI效果 數組

    將靜態的結構和樣式重構爲基於Vue模板語法的形式 app

    處理事件綁定和js控制邏輯性能

  3. 聲明式編程 this

    模板的結構和最終顯示的效果基本一致spa

1.html結構

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

二、 提供的數據

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

三、 把數據渲染到頁面

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

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

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

<div id="app">
        <div class="tab">
            <ul>
                <!--  
                    1、綁定key的做用 提升Vue的性能 
                    2、 key 須要是惟一的標識 因此須要使用id, 也能夠使用index ,
                        index 也是惟一的 
                    3、 item 是 數組中對應的每一項  
                    4、 index 是 每一項的 索引
                -->
                <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>
        var vm = new Vue({
            //  指定 操做元素 是 id 爲app 的 
            el: '#app',
            data: {
                currentIndex: 0, // 選項卡當前的索引
                list: [{
                        id: 1,
                        title: 'orange',
                        path: 'img/orange.png'
                    },
                    {
                        id: 2,
                        title: 'lemon',
                        path: 'img/lemon.png'
                    }, {
                        id: 3,
                        title: 'apple',
                        path: 'img/apple.png'
                    }
                ]

            }
         })
    </script>

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

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

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

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

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

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

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

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

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

<body>
    <script src="vue.js"></script>
    <div id="app">
        <div class="tab">
            <ul>
                <!--  
                    1、綁定key的做用 提升Vue的性能 
                    2、 key 須要是惟一的標識 因此須要使用id, 也能夠使用index ,
                        index 也是惟一的 
                    3、 item 是 數組中對應的每一項  
                    4、 index 是 每一項的 索引
                -->
                <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>
        var vm = new Vue({
            //  指定 操做元素 是 id 爲app 的 
            el: '#app',
            data: {
                currentIndex: 0, // 選項卡當前的索引
                list: [{
                        id: 1,
                        title: 'orange',
                        path: 'img/orange.png'
                    },
                    {
                        id: 2,
                        title: 'lemon',
                        path: 'img/lemon.png'
                    }, {
                        id: 3,
                        title: 'apple',
                        path: 'img/apple.png'
                    }
                ]

            },
            methods: {
                change: function (index) {
                    // 在這裏實現選項卡切換操做:本質就是操做類名
                    //如何操做類名?就是經過currentIndex
                    this.currentIndex = index;
                }
            }
        })
    </script>
</body>
相關文章
相關標籤/搜索