Javascript 将类添加到对象1,等待,在for循环中将类添加到对象2

Javascript 将类添加到对象1,等待,在for循环中将类添加到对象2,javascript,Javascript,我想用一个类获取元素集合。然后,我希望遍历集合中的每个元素,以便添加一个类 但是,我希望它向集合中的第一个类添加一个类,然后等待5秒钟,然后再添加到集合中的第二个类。等等 <script type="text/javascript"> window.onload = function(){ var boxs = document.getElementsByClassName("paragraph"); for(let i = 0; i <

我想用一个类获取元素集合。然后,我希望遍历集合中的每个元素,以便添加一个类

但是,我希望它向集合中的第一个类添加一个类,然后等待5秒钟,然后再添加到集合中的第二个类。等等

<script type="text/javascript">
    window.onload = function(){
        var boxs = document.getElementsByClassName("paragraph");

        for(let i = 0; i < boxs.length; i++){
            setTimeout(function () {
                boxs[i].classList.add("type");
            },5000);
        }
    }
</script>

window.onload=函数(){
var-boxs=document.getElementsByClassName(“段落”);
for(设i=0;i
您可以使用
i
变量来计算适当的延迟(5秒后第一次执行,10秒后第二次执行,等等):

for(设i=0;i

当您调用
setTimeout
时,您只是在为执行回调设置一个计时器。这就是为什么您需要为每个调用计算适当的延迟。

您可以使用
i
变量来计算适当的延迟(5秒后第一次执行,10秒后第二次执行,等等):

for(设i=0;i

当您调用
setTimeout
时,您只是在为执行回调设置一个计时器。这就是为什么您需要为每个呼叫计算适当的延迟。

所有设置的超时同时运行。循环运行并将每件事情设置为以5秒的速度运行。您需要通过抵消每次迭代来增加延迟

for(let i = 0; i < boxs.length; i++){
  setTimeout(function () {
    boxs[i].classList.add("type");
  },5000 * (i + 1));
}
p{color:#CCC;}
p、 键入{color:#000;}
一个

两个


五个

所有设置的超时同时运行。循环运行并将每件事情设置为以5秒的速度运行。您需要通过抵消每次迭代来增加延迟

for(let i = 0; i < boxs.length; i++){
  setTimeout(function () {
    boxs[i].classList.add("type");
  },5000 * (i + 1));
}
p{color:#CCC;}
p、 键入{color:#000;}
一个

两个


五个

您需要一个闭包,否则当
i==boxs.length
时,所有函数都将执行

for (let i = 0; i < boxs.length; i++) {
    ( num => setTimeout(function () {
        boxs[num].classList.add("type");
    }, 5000*num))(i)
}
for(设i=0;isetTimeout(函数(){
boxs[num].classList.add(“type”);
},5000*num)(一)
}
编辑


我刚刚注意到您使用了
let
,因此实际上不需要闭包。每个循环都有自己的作用域。您只需使用
5000*i

您需要一个闭包,否则当
i==boxs.length
时,所有函数都将执行

for (let i = 0; i < boxs.length; i++) {
    ( num => setTimeout(function () {
        boxs[num].classList.add("type");
    }, 5000*num))(i)
}
for(设i=0;isetTimeout(函数(){
boxs[num].classList.add(“type”);
},5000*num)(一)
}
编辑


我刚刚注意到您使用了
let
,因此实际上不需要闭包。每个循环都有自己的作用域。你可以只使用
5000*i

不解决
boxs[i]
的问题,因为它总是
boxs[boxs.length]
,而不是
boxs[0]
boxs[1]
,等等。啊,除了不,因为它与
let
一起工作,我今天学到的坏东西。获胜的机会。不过,这一点很好。不能解决始终是
boxs[i]
boxs[boxs.length]
,而不是
boxs[0]
boxs[1]
,等等。啊,除了不,因为它确实适用于
let
,我今天学到的坏东西。获胜的机会。不过,这一点很好。