vue经典选项卡

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

vue经典选项卡

公子清   2022-05-23 我要评论

选项卡方法: 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>

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们