如何使用 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

原文由 Raj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 398
2 个回答

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 为“未设置计时器”提供了一个方便的标志值。 (其他平台可能会返回其他值;例如,Node.js 的计时器函数会返回一个对象。)

要安排一个函数 触发一次,请改用 setTimeout 。不会一直开火。 (它还返回一个句柄,您可以使用它在它触发之前通过 clearTimeout 取消它,如果合适的话。)

 setTimeout(drawAll, 20);

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 4.0 许可协议

clearInterval 是一种选择:

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

原文由 Joshua - Pendo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏