我认为此问题之前一定是问过,但我找不到另一个问题。无论如何我想重复一个功能20次,每次之间重复半秒。
for (var i = 0; i < 20; i++)
{
setTimeout(function(){
mySwiper.update();
console.log("Test");}, 500);
}
但此刻它只等了半秒钟,然后一次又重复20次。不知道怎么做。谢谢你的时间
答案 0 :(得分:1)
如果你看一下你如何使用setTimeout
,你将setTimeout
调用20次,延迟为500
,这意味着在500ms之后传递的函数将被执行20次一次每次致电setTimeout()
。
一种解决方案是使用计数器和setInterval()
var counter = 0,
interval = setInterval(function () {
mySwiper.update();
if (++counter == 20) {
clearInterval(interval);
}
})
答案 1 :(得分:1)
这有点破解,但你可以将间隔乘以索引,以给它带来同样的效果。
for (var i = 0; i < 20; i++) {
setTimeout(function() {
mySwiper.update();
console.log("Test");
}, 500 * i);
}
答案 2 :(得分:1)
您遇到的问题是因为setTimeout
(和setInterval
)在另一个线程上工作。你的外观很快就会结束,所以你的计时器基本上都是同时启动的。你想要做的是递归地将它们链接在一起,以便每个计时器调用下一个计时器,并保持计数。
function count(num){
setTimeout(function(){
mySwiper.update();
console.log("Test");
if(num > 0) count(num - 1);
}, 500);
}
然后,您只需执行
而不是循环count(20);
作为一个注释,如果你想让它每隔一秒发射一次,无论其他所需的时间有多长,请移动使用@Arun所建议的内容。一切都完成后,我的方法需要另外500毫秒。