您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页JavaScript实现选项卡效果的分析及步骤

JavaScript实现选项卡效果的分析及步骤

来源:宝玛科技网

这个位置我们也是可以设置的。在给每个li添加事件的时候用到了for里面的参数i在这里表示0,1,2可以表示标题块之间的相对位置(lis[i].index = i),这也正是盒子块之间的相对位置。我们可以通过divs[this.index]来获取被点击标题对应的盒子。

var divs = document.getElementById("tab").getElementsByTagName("div");
//console.log(divs)
 for(let i=0; i<lis.length; i++){
 lis[i].index = i;
 lis[i].onclick = function() {
 	for( let n=0; n<lis.length; n++){
 	lis[n].className = "";
 	divs[n].className = "hide";
 	}
 	this.className = "on";
 	divs[this.index].className = "";
 	}
 }	

到这里,题目要求的所有效果都实现了,回头看看,感觉不是很难,但是当时在刚看到题目的时候还是很懵的,不知道如何获取被点击的标题(想到了冒泡和捕获,后面还需要对这个进行学习),不知道如何设置css....,自己还需要更多的学习。

——————————分割线—————

很多大佬都指导我说之前的方法耗内存:用for循环给每个li都添加一个点击事件。下面,我用事件委托来更新一下这个办法:

window.onload = function() {
 var uls = document.getElementById('tit');
 var lis = uls.getElementsByTagName('li');
 var divs = document.getElementById('tab').getElementsByTagName('div');
 // console.log(lis)
 console.log(divs)
 uls.onclick = function(ec) {
 for(let i=0; i<lis.length; i++){
 lis[i].className = ""; //遍历每个li设置类名
 divs[i].className = "hide"; 
 }
 var ev = ev || window.event;
 var target = ev.target || ev.srcElement;
 if(target.nodeName.toLowerCase() == 'li'){
 target.className = "on";
 //自己在每个li中定义了一个属性 data-index
 divs[target.getAttribute("data-index")].className = ""; 
 console.log(target);
 }
 } 
 }

我在html中给每个li自定了属性data-index:

<li class="on" data-index="0">房产</li>
<li data-index="1">家居</li>	
<li data-index="2">二手房</li>

再在js中用getAttribute获取所点击的li的属性值

divs[target.getAttribute("data-index")].className = "";

源码链接

总结

Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务