JavaScript实现选项卡效果(新手实战必备)

222 阅读1分钟

效果分析之HTN结构以及css样式

  整个结构由上至下分为两部分,标题块使用列表的方式来做,内容快使用盒子模型
  <!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;
        list-style: none
    }
    .box {
        width: 600px;
        border: 1px dashed red;
        margin: 0 auto;
    }
    ul {
        width: 100%;
        height: 50px;
        display: flex;
        /* 弹性盒子 */
    }
    ul li {
        flex: 1;
        text-align: center;
        line-height: 50px; color:#333;
        font-size: 25px;
    }
    ul li:hover {
        background-color: blueviolet
    }
    ul li.current {
        /*  ul 下的li 有current类名的li */
        background: pink
    }
    .body_box {
        width: 100%;
        height: 200px;
    }
    .body_box div {
        text-align: center;
        line-height: 200px;
        font-size: 50px;
        background-color: rgba(43, 221, 168, .5);
        display: none;
    }
     .body_box div.current {
     display: block;
    }
 </style>
 </head>
 <body>
    <div class="box">
         <ul class="tab_box">
             <li class="current">css</li>
             <li>html</li>
             <li>js</li>
        </ul>
        <div class="body_box">
              <div class="current">薛之谦</div>
              <div>周杰伦</div>
              <div>权志龙(GD)</div>
        </div>
   </div>
    </body>
    </html>

交互效果之JavaScript

<script>
 var tabs = document.getElementsTagName('li'),
     bodys = document.querySelectorAll('.body_box div');
    for(var i = 0;i < tabs.length;i++){
        tabs[i].myIndex = i;
        tabs[i].onclick = function(){
        //点击那个元素就有背景颜色  给点击的元素加上current的类名即可
         for(var j = 0; j < tabs.length; j++){
          tabs[j].className = '';
          bodys[j].className = '';
       } 
             this.className = 'current'
         //实现效果点击第几个li 就让第几个box显示
         //通过this.myIndex 知道当前点击元素的索引
         //bodys[this.myIndex]是当前的div的第几行
         bodys[this.myIndex].className = 'current'
    }
}
  </script>