如何使用setInterval和clearInterval?

Raj*_*Raj 117 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

大家好,

我想调用drawAll()一次不创建一次又一次调用的循环,drawAll我应该使用递归方法还是应该使用clearInterval?

还请告诉我使用clearInterval?谢谢 :)

T.J*_*der 190

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
Run Code Online (Sandbox Code Playgroud)

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

要将函数计划为仅触发一次,请setTimeout改为使用.它不会继续射击.(clearTimeout如果合适的话,它还会返回一个句柄,你可以用它来取消它.)

setTimeout(drawAll, 20);
Run Code Online (Sandbox Code Playgroud)


Jos*_*ndo 28

clearInterval是一个选项:

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

  • 是的,引号和parens.简单地说:`setInterval(doStuff);`.将字符串传递给`setInterval`是对`eval`的隐式调用.最好传入函数*reference*. (9认同)
  • 切勿使用带有`setInterval`或`setTimeout`的字符串. (7认同)

dle*_*lev 10

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


PJ3*_*PJ3 10

我用角度和电子,

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

我必须先获取 id 并调用 clearInterval

clearInterval(timerobject._id)

我为此苦苦挣扎了好几个小时。希望这可以帮助。


Hyn*_*ekS 8

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

var interval = null;    

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

function stopStuff() {
    clearInterval(interval);
}
Run Code Online (Sandbox Code Playgroud)