如何使用 setInterval 和 clearInterval?

考虑一下:

function doKeyDown(event) {
switch (event.keyCode) {
case 32:
/* Space bar was pressed */
if (x == 4) {
setInterval(drawAll, 20);
}
else {
setInterval(drawAll, 20);
x += dx;
}
break;
}
}

我想调用 drawAll()一次,而不是创建一个反复调用 drawAll循环。我应该使用递归方法还是应该使用 clearInterval

如何使用 clearInterval

312787 次浏览

改为使用 setTimeout(drawAll, 20),它只执行函数一次。

ClearInterval 是一种选择:

var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec
function doStuff() {
alert('this is a 2 second warning');
clearInterval(interval);
}

setInterval设置一个 反复出现定时器。它返回一个句柄,您可以将其传递给 clearInterval以阻止它触发:

var handle = setInterval(drawAll, 20);


// When you want to cancel it:
clearInterval(handle);
handle = 0; // I just do this so I know I've cleared the interval

在浏览器上,句柄保证是一个不等于 0的数字; 因此,0为“ no timer set”提供了一个方便的标志值。(例如,其他平台可能返回其他值; Node.js 的计时器函数返回一个对象。)

若要将函数调度到 只有激发一次,请改为使用 setTimeout。它不会一直开火的。(它还返回一个句柄,您可以使用该句柄通过 clearTimeout取消它,然后在适当的时候触发该句柄。)

setTimeout(drawAll, 20);

附注-如果你想使用单独的函数来设置和清除时间间隔,时间间隔变量必须在“相对全局”或“一级向上”范围内对所有函数都可访问:

var interval = null;


function startStuff(func, time) {
interval = setInterval(func, time);
}


function stopStuff() {
clearInterval(interval);
}

我用了 角度电子

在我的例子中,setInterval返回一个 Node.js Timer 对象。

我必须先拿到身份证,然后打电话给 间隔时间:

clearInterval(timerobject._id)