选项卡

作者: Christoles | 来源:发表于2019-02-25 19:27 被阅读0次

实现方式:
1、闭包
2、动态获取-设置属性

实现效果:
image.png
先设置统一样式:
  • html:
<div class="sel">
      <div class="btn">
            <button>html</button>
            <button>css</button>
            <button>javascript</button>
      </div>
      <ul class="content">
            <li>HTML是超文本标记语言</li>
            <li>CSS是层叠样式表</li>
            <li>JavaScript是弱类型解释型脚本语言</li>
      </ul>
</div>
  • css:
        *{
            margin: 0;
            padding: 0;
            list-style: none;
            outline: none;
        }
        .sel{
            width: 300px;
            height: 300px;
            border: 1px solid #000000;
        }
        .btn{
            font-size: 0;
        }
        .btn button{
            width: 33.33%;
            height: 50px;
            margin: 0;
            cursor: pointer;
        }
        .content li{
            width: 100%;
            height: 150px;
            display: none;
        }
        .content li:nth-child(1){
            display: block;
        }

一、闭包

1.原理
  • 1.(i)---for循环i先把所有的点击事件预加载入空间,然后并没有被点击触发执行;
  • 2.btns[k]---当点击相应的按钮时,执行function(k)函数;
  • 3.ali[j]---for循环j是先把全部的方块隐藏,再显示点击的相应的btns[k]会显示相应的ali[k]。
2.js代码
for(var i=0;i<btns.length;i++){
     (function(k){//这里的k值是 形参
          btns[k].addEventListener("click",function(){
              //console.log(k);//点击哪个按钮显示哪个值
              for(var j=0;j<ali.length;j++){
                  ali[j].style.display="none";
              }//全部先隐藏
              ali[k].style.display="block";//点击哪个哪个显示出来
          })
     })(i);//这里的i值是 实参(实参也可以是一个变量)
}

二、动态获取-设置属性

1.原理
  • 动态获取:通过给btn自定义属性index,并赋值为i,点击第N个btn对应赋值给第N个ali
2.js代码
var btns=document.querySelectorAll(".btn button");
var ali=document.querySelectorAll(".content li");       
            
for(i=0;i<btns.length;i++){
/*动态获取*/        
    btns[i].index = i;//自定义按钮属性index,并赋值为i
    btns[i].addEventListener("click",function(){
        //console.log(this);//相应按钮div
        //console.log(this.index);//相应按钮位置数
        for(var j=0;j<ali.length;j++){//先把全部隐藏
            ali[j].style.display="none";
        }
        ali[this.index].style.display="block";//选择btns的i 对应显示ali[this.index]即ali[i]
    })
}

相关文章

网友评论

      本文标题:选项卡

      本文链接:https://www.haomeiwen.com/subject/opgiyqtx.html