js之三行变色的N多种方案理论上归结为以下三种方案
1、依次遍历每一个li,通过索引除以3取余数,让当前的li有不同背景颜色
2、告别一个个的判断,直接采用数组或者直接找对应样式的来完成
3、不是遍历每一个li,而是遍历每一组
但我们也知道js的写法可以千变万化
每个人的思路也都不尽相同
下面我来show code啦
Html代码
JS代码
var obox= document.getElementById('box');
var ulList= obox.getElementsByTagName('li');
//代码写法一
for(var i=0;i<ulList.length;i++){
var n=i%3;
var liColor=ulList[i]
console.log(ulList[i])
if(n===0){
liColor.style.backgroundColor='red';
}else if(n===1){
liColor.style.backgroundColor='yellow';
}
else {
liColor.style.backgroundColor='blue';
}
}
//代码写法二
for(var i=0;i<ulList.length;i++){
var liColor=ulList[i]
if(i%3===0){
liColor.style.backgroundColor='red';
}else{
liColor.style.backgroundColor='yellow';
}}
//代码写法三
for(var i = 0;i<ulList.length;i++){
switch(i%3){
case 0:
ulList[i].className="bgColorPink";
break;
case 1:
ulList[i].className="bgColorRed";
break;
case 2:
ulList[i].className="bgColorYellow";
break;
}}
//代码写法四
var colorArray=["bgColorRed","bgColorPink","bgColorYellow"];
for(i in ulList){
ulList[i].className=colorArray[i%colorArray.length]
}
//代码写法五(代码四的改进版)
for(i in ulList){ ulList[i].className='bg'+(i%3);}
//代码写法六
function changeColor(){ for(var i =0;i<ulList.length;i++){ ulList[i].style.backgroundColor = i%3==0?'lightblue':(i%3==1?'lightyellow':'lightpink') }}changeColor()
//代码写法七
for(var i=0;i<ulList.length;i+=3){
var max=ulList.length-1
//每一组循环一次,在循环体中,把当前这一组的样式设置即可(可能出现当前这一组不够三个,这样会报错)
ulList[i].style.background='lightblue';
i+1<=max?ulList[i+1].style.background='lightpink':null;
i+2<=max?ulList[i+2].style.background='lightyellow':null;
}
关于Bug
代码七的错误:因为次方法是一组一组遍历,但当ulList的数量不再是3、6、9...那么剩下的li便无法找到,因此会报错。需要再加个判断,当i+1,i+2的最大值大于max时,让她的样式为null,这样子就不会报错啦~
CSS代码
把每一次“好难”,“很累”,“我不行”
换成“再坚持一下试试”
结局是不是会好一点
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!