vue实现经典选项卡功能

vue实现经典选项卡功能

本文实例为大家分享了vue实现经典选项卡的具体代码,供大家参考,具体内容如下

选项卡方法: 1. vue方法选项卡 2. 事件委托方法性能好点

2大经典选项卡思路:

1.3个li控制1个div,每次点击li都控制div里面的内容发生变化
2.3个li控制3个div显示隐藏`

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title>     <style>       *{           margin:0;           padding:0;       }       .tabBox{           box-sizing:border-box;           /*  元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度; */           margin:20px auto;           /* 上下边距为 20px ,左右 自动,也是居中显示。 */           width:600px;       }       .tabBox .tab{           display: flex;           position:relative;           top:1px;       }       .tabBox .tab li{           list-style:none;           margin-right:10px;           padding:0 20px;          line-height:35px;          border:1px solid #AAA;          background: #EEE;          cursor:pointer;       }       .tabBox .tab li.active{          background: #FFF;          border-bottom-color:#FFF;        }       .tabBox .content{           /* display:none; */           height:300px;           border:1px solid lightblue;           padding:10px;       }        /* .tabBox .content.active{            display:block;        }         */     </style> </head> <body>     <!--          选项卡方法:        1. vue方法选项卡        2. 事件委托方法性能好点         2大经典选项卡思路:         1.3个li控制1个div,每次点击li都控制div里面的内容发生变化         2.3个li控制3个div显示隐藏     -->     <div id="app">         <div class="tabBox">             <!-- 获得事件源,判断事件源,事件委托绑定给li的父级元素 -->                 <ul class="tab" >                         <!-- @click='handle($event)' -->                     <li v-for='(item,index) in tob ' v-html='item.name' :class="{active:index===curIndex}"  @click='handle($event,index,item.id)'></li>                     <!-- @click='curIndex=index' </li>                     <li>自定义方法:index='index'</li>                     <li>纪录片</li> -->                 </ul>                     <div  class="content" v-html='content'></div>                     <!-- v-for='(item,index) in tob' v-html='item.children' :class="{content:true,active:index===curIndex}" -->                 <!-- <div class="content">动漫内容</div>                 <div class="content">纪录片内容</div> -->              </div>             </div>       </body>       <script src="node_modules/vue/dist/vue.min.js"></script>       <script src="node_modules/axios/dist/axios.min.js"></script>       <script>           let tob =[{               id:1,               name:'音乐',            },           {               id:2,               name:'影视',           },{               id:3,               name:'动漫',           },{               id:4,               name:'纪录片',           }];             let vm = new Vue({                 el:'#app',                 data:{                     //=>选项卡数据 tob                     tob,                     //展示选项卡索引                     curIndex:0,                     //内容区域                     content:'',                 },                 cearted(){                       //生命周期函数(vue实例创建成功)                       this.queryDATA(tob[this.curIndex]['id']);                 },                 methods:{                     //ev传参事件委托方法                     // handle(ev){                     //    let target = ev.target,                     //        tarTag = target.tagName;                     //        if (tarTag === 'LI'){                     //            this.curIndex = parseInt(target.getAttribute('index'));                     //        }                     // },                     queryDATA(curID){                         // 异步ajax请求                         axios.get('data.json').then(response => {                             return response.data;                         }).then(result => {                              let itemDATA = result.find(item => parseInt(item.id) === parseInt(curID));                              console.log(result);                              if (itemDATA) {                                  this.content = itemDATA.content;                                  return;                              }                              return Promise.reject();                         }).catch(reason => {                             this.content = '没有信息'                         });                     },                     handle(ev,index,id){                         if (this.curIndex === index) return;                         this.curIndex = index;                         this.queryDATA(id);                     },                 }             }) </script> </html>

推荐阅读

    vue项目一些常见问题

    vue项目一些常见问题,组件,样式,**样式污染问题**同样的样式不需要在每个组件都复制组件内单独的样式加外层class包裹。加scope。否则只是

    01-Vue项目实战-网易云音乐-准备工作

    01-Vue项目实战-网易云音乐-准备工作,网易,项目,前言在接下来的一段时间,我会仿照网易云音乐,利用Vue开发一个移动端的网易云音乐项目。在做

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发,自己的,后台,后台框架一直想开发一套完全属于自己的后台,但是18年的时候,曾经答

    Vue项目中 App.vue文件

    Vue项目中 App.vue文件,文件,内容, 在App.vue文件中,定义了一个id为app的div,在这个div板块中放置Helloworld组件,文件内容如下图所示:在

    目录的设置|目录的设置在哪个选项卡

    目录的设置|目录的设置在哪个选项卡,,目录的设置在哪个选项卡1、在电脑上找到需要形成目录兰的word文档,双击打开。2、选中需要在左侧形成

    1-Vue构造函数的生成

    1-Vue构造函数的生成,函数,属性,版本:@2.6.10环境:web ;思维图:www.processon.com/view/link/5…我们使用的Vue是一个经过层层加强的构造函数

    vue的跨域是什么意思

    vue的跨域是什么意思,跨域,浏览器,代理,请求,服务器,同源策略,在vue中,跨域是指浏览器不能执行其他网站的脚本;它是浏览器同源策略造成的,是浏览器

    Vue中如何实现表单验证

    Vue中如何实现表单验证,验证,表单验证,表单,用户名,元素,指令,随着web应用的不断发展,表单验证逐渐成为web开发过程中不可或缺的一部分。在Vue中

    用vue框架有什么好处

    用vue框架有什么好处,组件,项目,数据,优化,操作,框架,用vue的好处:1、Vue是组件化开发,减少代码的书写,使代码易于理解;2、可以对数据进行双向绑定;3