一尘不染

如何使用setInterval和clearInterval?

javascript

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?谢谢 :)


阅读 503

收藏
2020-04-25

共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

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

要将功能安排为
触发一次,请setTimeout改用。它不会继续射击。(它还会返回一个句柄clearTimeout,如果合适的话,可以在触发一次之前取消该句柄。)

setTimeout(drawAll, 20);
2020-04-25