JavaScript如何在特定时间后清除间隔。

13
setInterval("FunctionA()", 1000);

现在我该如何在确切的5秒后清除这个间隔,以便达到 -

var i = setInterval("FunctionA()", 1000);
(After 5 seconds)
clearInterval(i);

1
setInterval("FunctionA()", 1000)setInterval(FunctionA, 1000) 非常相似,但后者不涉及 eval,因此更加高效。 - lanzz
@lanzz 谢谢,感激不尽。 - skos
3个回答

37

您可以使用setTimeout函数来实现此操作:

var i = setInterval(FunctionA ,1000);
setTimeout(function( ) { clearInterval( i ); }, 5000);

不幸的是,这在短时间间隔内并不精确,例如将40毫秒作为间隔,5000毫秒作为超时。 - daniel

17

使用setTimeout来清除setInterval并不是一个理想的解决方案。虽然它可以工作,但它会在每个间隔上触发setTimeout。如果你只清除了间隔,那么这是可行的,但如果你除了清除间隔之外还执行其他代码,那么可能会出现问题。更好的解决方案是使用计数器。如果你的间隔每1000ms/1秒触发一次,那么如果它触发了5次,就已经过去5秒钟了。这样更加简洁。

count=0;
var x=setInterval(function(){
  // whatever code
  if(count >= 4) clearInterval(x);
  count++;
}, 1000);

这个不起作用。x不在函数的范围内。 - daniel
2
@daniel 是的,没错。 - Omar Alshaker
2
这个答案就是我一直在寻找的。你所要做的就是将setInterval包装成一个变量,并在需要的计数时调用clearInterval!感谢@ironarm。 - Huy Le

2
function intervalGap(){
    let no = 1;
    setInterval(function(){
    if(no < 11){
        console.log(no);
        no++;
    }else{
        clearInterval(this);
    }}, 500); // for every half second
}
intervalGap();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接