我想在每次迭代时延迟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);
}
有什么建议吗?
答案 0 :(得分:4)
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);
}
答案 1 :(得分:2)
试试这个:
var o = 1;
function repeatMe(){
setupAnimation(o);
o++;
setTimeout(function(){repeatMe();},1000);
}
repeatMe();
答案 2 :(得分:1)
如果你想使用第二种方法,那就是工作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>
答案 3 :(得分:1)
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);
}
答案 4 :(得分:0)
您可以使用:
setTimeout(function(){ myFunction(parameter)}, timeoutLength);