前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tab选项卡

Tab选项卡

作者头像
梨涡浅笑
发布2020-12-02 15:41:42
2.2K0
发布2020-12-02 15:41:42
举报
文章被收录于专栏:全栈自学笔记

实现步骤:

  1. 实现静态UI效果 用传统的方式实现标签结构和样式
  2. 基于数据重构UI效果 将静态的结构和样式重构为基于Vue模板语法的形式 处理事件绑定和js控制逻辑
  3. 声明式编程 模板的结构和最终显示的效果基本一致
1.html结构
代码语言:javascript
复制
<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>
2、 提供的数据
代码语言:javascript
复制
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'
                    }
                ]
3、 把数据渲染到页面
  • 把tab栏 中的数替换到页面上
    • 把 data 中 title 利用 v-for 循环渲染到页面上
    • 把 data 中 path利用 v-for 循环渲染到页面上
代码语言:javascript
复制
<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
代码语言:javascript
复制
<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>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.html结构
  • 2、 提供的数据
  • 3、 把数据渲染到页面
  • 4.给每一个tab栏添加事件,并让选中的高亮
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档