如何使用setInterval和clearInterval?

时间:2011-05-12 13:14:11

标签: javascript jquery

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

5 个答案:

答案 0 :(得分:167)

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);

答案 1 :(得分:25)

clearInterval 是一个选项:

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

答案 2 :(得分:10)

请改用setTimeout(drawAll, 20)。那只执行一次功能。

答案 3 :(得分:2)

我用电子角度

就我而言,setInterval返回一个Nodejs Timer对象。当我打电话给clearInterval(timerobject)时,它不起作用。

我必须先获取id并调用clearInterval

clearInterval(timerobject._id)

我在这方面已经挣了好几个小时。希望这有帮助。

答案 4 :(得分:1)

旁注 - 如果您想使用单独的功能来设置&清除区间,必须可以访问所有区间变量,在“相对全局”或“一级向上”范围内:

var interval = null;    

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

function stopStuff() {
    clearInterval(interval);
}