2 回答

TA贡献1799条经验 获得超9个赞
您已将循环代码置于 setTimeout 块中,因此整个循环将运行一目了然,但会在 1000 毫秒后运行。如果您希望元素以 1 秒延迟一一出现,您可以将逻辑更改为此,(1000 * index)为每个元素设置不同的超时:
for (let index = 0; index < selectedDivs.length; index++) {
setTimeout(function(){
selectedDivs[index].classList.remove('selected')
}
, (1000 * index)
)
}

TA贡献1815条经验 获得超13个赞
简单的方法是进行递归循环,使用超时来延迟对自身的调用。概念证明如下:
var childDivs = document.querySelectorAll('.child');
function selectDivs(divs, index, delay) {
divs[index].classList.add('selected');
delay = delay || 1000; // if you want to change the delay
index++
if (index < divs.length) {
setTimeout(function() {
selectDivs(divs, index, delay);
}, delay);
}
}
.flex-container {
display: flex;
flex-wrap: wrap;
}
.child {
height: 100px;
width: 100px;
box-sizing: border-box;
background-color: yellow;
border: 1px solid #000;
}
.selected {
background-color: red;
}
<body onload="selectDivs(childDivs, 0)">
<div class="flex-container">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
</body>
我个人会尽可能地使用 CSS,设置一个 CSS 变量来延迟更改。只是为了能够更容易地跟踪 DOM 中发生的事情。
var childDivs = document.querySelectorAll('.child');
function selectDivs(children) {
let child = {};
for (let i = 0; i < children.length; i++) {
child = children[i];
child.style.setProperty('--background-animation-delay', i+'s');
child.classList.add('selected');
}
}
.flex-container {
display: flex;
flex-wrap: wrap;
}
.child {
--background-animation-delay: 0s;
height: 100px;
width: 100px;
box-sizing: border-box;
background-color: #ffff00;
border: 1px solid #000;
transition: background-color 0s var(--background-animation-delay);
}
.selected {
background-color: #ff0000;
}
<body onload="selectDivs(childDivs)">
<div class="flex-container">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
</body>
添加回答
举报