如何使用 setInterval 和 clearInterval?

2022-08-30 01:56:31

考虑:

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() 一次,而不是创建一个一次又一次调用的循环。我应该使用递归方法还是应该使用clearIntervaldrawAll

我该如何使用?clearInterval


答案 1

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

在浏览器上,句柄保证是一个不等于 ;因此,为“未设置计时器”提供方便的标志值。(其他平台可能会返回其他值;例如.js节点的计时器函数返回一个对象。00

若要将函数计划为仅触发一次,请改用。它不会继续开火。(它还返回一个句柄,您可以使用该句柄在触发该句柄(如果适用)之前取消它。setTimeoutclearTimeout

setTimeout(drawAll, 20);

答案 2

clearInterval 是一种选择:

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