Javascript set/clearinterval不起作用

Rob*_*man 2 javascript

如何在javascript中停止间隔?

为什么间隔不停?

setInterval(alarm, 500);
window.clearInterval(alarm);
Run Code Online (Sandbox Code Playgroud)

还尝试过:

window.setInterval(alarm, 500);
window.clearInterval(alarm);
Run Code Online (Sandbox Code Playgroud)

总是同样的问题:(

仍然不起作用:

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");
}
Run Code Online (Sandbox Code Playgroud)

epa*_*llo 11

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

var myTimer = window.setInterval(alarm, 500);
window.clearInterval(myTimer);
Run Code Online (Sandbox Code Playgroud)

编辑:

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

让它全球化.

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

MDN文档:window.setInterval

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

句法

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);
Run Code Online (Sandbox Code Playgroud)

哪里

  • intervalID 是一个唯一的间隔ID,您可以传递给clearInterval().
  • func 是您想要重复调用的函数.
  • code 在备用语法中,是您希望重复执行的一串代码(建议不要使用此语法,原因与使用eval()相同)
  • delay是每次调用func之前setInterval()函数应该等待的毫秒数(千分之一秒).与setTimeout一样,强制执行最小延迟.请注意,在第一种语法中将其他参数传递给函数在Internet Explorer中不起作用.如果要在该浏览器上启用此功能,则必须使用兼容性代码(请参阅回调参数段落).