如何使用 setInterval 和 clearInterval?

Posted

技术标签:

【中文标题】如何使用 setInterval 和 clearInterval?【英文标题】:How to use setInterval and clearInterval? 【发布时间】:2011-08-24 03:00:55 【问题描述】:
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?谢谢:)

【问题讨论】:

【参考方案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);

【讨论】:

【参考方案2】:

clearInterval 是一种选择:

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

【讨论】:

永远不要使用带有setIntervalsetTimeout的字符串。 你的意思是我应该删除 doStuff() 周围的引号? 是的,引号和括号都是。简单地说:setInterval(doStuff);。将字符串传递给setInterval 是对eval 的隐式调用。最好改为传入函数reference 嗯,否决票也许是公平的。我展示了一个不正确的示例(尽管它在我的情况下有效,但我正在改变这些)。竖起大拇指! :)【参考方案3】:

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

var interval = null;    

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


function stopStuff() 
    clearInterval(interval);

【讨论】:

【参考方案4】:

我用电子角度,

在我的例子中,setInterval 返回一个 Nodejs Timer 对象。当我打电话给clearInterval(timerobject) 时,它不起作用。

我必须先获取 id 并调用 clearInterval

clearInterval(timerobject._id)

我为此苦苦挣扎了好几个小时。希望这会有所帮助。

【讨论】:

【参考方案5】:

请改用setTimeout(drawAll, 20)。只执行一次函数。

【讨论】:

非常感谢,但是 setTimeout 正在完成每个点的循环,我使用其他方法并且工作正常,函数 doKeyDown(event) switch (event.keyCode) case 32: /* Space条被按下 */ loop = setInterval(drawAll, 20);如果 (x == 202) x = 400;微调器(); 休息; 这不是问题

以上是关于如何使用 setInterval 和 clearInterval?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 setInterval 和 clearInterval?

js实现一些常用网站的打开速度

如何使用 window.setInterval 动态创建 HTMLElement 和更新 innerHTML

如何使用 SetInterval 函数和 'if' 使 div 弹出?

如何实现setTimeout和setInterval

setInterval 和 setTimeout 是如何工作的?