使用setTimeout延迟循环迭代
Using setTimeout to delay loop iteration
我想在每次迭代中延迟while
循环。我尝试了以下方法:
var o = 1;
while(o<4){
setTimeout("setupAnimation(o)",2000);
//setupAnimation(o); //<--this works but everything happens att the same time
o++;
}
我也试着这样写,但也没用:
var o = 1;
function repeatMe(){
setupAnimation(o);
o++;
setTimout('repeatMe()',1000);
}
有什么建议吗?
eval
速度慢,难以调试,并且存在潜在的安全问题(取决于数据的来源)。不要使用它。(通过代理将字符串传递给setTimeout
使用eval
。)
将函数传递给setTimeout
。您需要使用闭包来捕获所传递函数的o
的当前值。
您可能还应该在这里使用for
循环,而不是while
循环。语法更加清晰。
function setupAnimationFactory(o) {
return function() {
setupAnimation(o);
}
}
for (var o = 0; o < 4; o++){
setTimeout(setupAnimationFactory(o),2000);
}
试试这个:
var o = 1;
function repeatMe(){
setupAnimation(o);
o++;
setTimeout(function(){repeatMe();},1000);
}
repeatMe();
如果您想使用第二种方法,这里是正在工作的Javascript
<script type="text/javascript">
var o = 1;
function repeatMe(){
setupAnimation(o);
o++;
setTimout(repeatMe(),1000);
}
function setupAnimation(o){
alert(o);
}
</script>
<a href='#' onclick="repeatMe()">Click Me</a>
var o = 1; //Global Variable
var animTimerId; //Global Variable
function setupAnimation(o){
// Your code goes here
o++;
if(o == 4){
clearTimeout(animTimeoutId);
break;
}
}
function repeatMe(){
animTimeoutId = setTimeout("setupAnimation(o)",2000);
}
您可以使用这个:
setTimeout(function(){ myFunction(parameter)}, timeoutLength);
相关文章:
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- 每个$.,循环获胜't逐个迭代HTML元素
- 从两个基于0的for循环迭代器中获取单个基于0的索引的公式
- 循环中的切换脚本只适用于第一次迭代
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 如何使用按钮控制循环中的迭代次数
- 我的Javascript for循环在1次迭代后停止
- 在数组中迭代时的JS循环位置
- Javascript 'while' 循环,如果条件为 false,如何停止迭代
- JavaScript循环迭代太多
- 在不同数据选项之间循环迭代对象
- 执行在外循环的第一次迭代后停止
- Ajax调用“;对于“;循环跳过奇数/偶数迭代
- foreach循环每次迭代之间的延迟
- 为什么迭代循环次数太多
- 在翡翠中迭代循环时重复
- jQuery迭代循环删除元素
- Javascript:在多个轴/方向上迭代/循环
- Javascript'删除'不会't在迭代循环中工作
- jade中的迭代循环不能正确地呈现数据