3

如何在javascript中停止间隔?

为什么间隔不停止?

setInterval(alarm, 500);
window.clearInterval(alarm);

也试过:

window.setInterval(alarm, 500);
window.clearInterval(alarm);

总是同样的问题:(

仍然不起作用:

var switc = 1;
getValue();
function getValue (){
if(switc == 1){
    var myTimer = window.setInterval(alarm, 500);
}
else if(switc == 0){
    window.clearInterval(myTimer);
}
}
function alarm(){
    console.log("test");
}
4

4 回答 4

15

当您调用 setInterval 时,它会返回一个整数,用于取消事件。将其存储到变量中并使用该变量取消事件。

var myTimer = window.setInterval(alarm, 500);
window.clearInterval(myTimer);

编辑:

您的代码不起作用,因为 myTimer 是一个局部变量,并且每次调用该函数时都会重置!

使其全球化。

var myTimer = null;
function getValue (){
    if(switc == 1){
        myTimer = window.setInterval(alarm, 500);
    }
    ...

MDN 文档:window.setInterval

重复调用函数或执行代码片段,每次调用该函数之间有固定的时间延迟。

句法

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);

在哪里

  • intervalID是可以传递给 clearInterval() 的唯一间隔 ID。
  • func是您要重复调用的函数。
  • code在替代语法中,是您希望重复执行的代码字符串(不推荐使用此语法,原因与使用 eval() 相同)
  • delay是 setInterval() 函数在每次调用 func 之前应该等待的毫秒数(千分之一秒)。与 setTimeout 一样,强制执行最小延迟。请注意,在第一种语法中将附加参数传递给函数在 Internet Explorer 中不起作用。如果您想在该浏览器上启用此功能,您必须使用兼容性代码(请参阅回调参数段落)。
于 2013-04-03T19:00:30.707 回答
2

该代码表明对 API 的误解。该setInterval()函数有两个参数:一个要调用的函数和一个表示调用之间毫秒数的数字。该函数返回一个标识该特定间隔计时器的令牌(一个数字)。可以传递令牌clearInterval()以取消计时器。

于 2013-04-03T19:00:46.450 回答
1

您正在尝试清除不存在的间隔。将 setInterval() 返回的 id 分配给一个变量,并在 clearInterval() 中使用它。

在您的情况下,警报是执行的功能,而不是间隔ID

var interval = setInterval(alarm, 500);
clearInterval(interval);
于 2013-04-03T19:00:54.653 回答
1
var timer = setInterval(alarm, 500);
Window.clearInterval(timer);

function alarm() {
    // Do stuff
}

您需要将间隔句柄保存到变量中,以便稍后在您想要清除/停止它时引用它。

于 2013-04-03T19:01:56.970 回答