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
以阻止其触发: 0
;因此,0
为“未设置定时器”设置了一个方便的标志值。 (其他平台可能会返回其他值;例如,NodeJS的计时器函数将返回一个对象。)要安排一个函数仅触发一次,请改用
setTimeout
。它不会继续射击。 (它还会返回一个句柄,如果合适的话,可以在一次触发前通过clearTimeout
取消它。)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
#2 楼
clearInterval是一种选择:var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec
function doStuff() {
alert('this is a 2 second warning');
clearInterval(interval);
}
#3 楼
请改用setTimeout(drawAll, 20)
。那只会执行一次功能。评论
非常感谢,但是setTimeout在每个点上都完成了循环,我使用了其他方法,并且工作正常,函数doKeyDown(event){switch(event.keyCode){情况32:/ *按下空格键* / loop = setInterval (drawAll,20);如果(x == 202){x = 400; spinner(); }; }}
–拉吉
2011年5月24日10:10
这不是问题
– NinoŠkopac
18年3月15日在6:05
#4 楼
我将角与电子配合使用,对于我来说,setInterval
返回一个Nodejs Timer对象。当我打电话给clearInterval(timerobject)
时,它不起作用。我必须先获取ID并致电clearInterval
clearInterval(timerobject._id)
几个小时。希望对您有所帮助。
#5 楼
旁注–如果要使用单独的功能来设置和清除间隔,则必须在“相对全局”或“一级升级”范围内对所有这些变量进行访问:var interval = null;
function startStuff(func, time) {
interval = setInterval(func, time);
}
function stopStuff() {
clearInterval(interval);
}
评论
切勿将字符串与setInterval或setTimeout一起使用。
– T.J.拥挤者
2011年5月12日13:19
您是说我应该删除doStuff()周围的引号?
–约书亚-Pendo
2011年5月12日13:23
是的,双引号和括号。只需:setInterval(doStuff);。将字符串传递给setInterval是对eval的隐式调用。最好改为传递函数引用。
– T.J.拥挤者
2011年5月12日13:28
嗯,不好意思,也许是公平的。我展示了一个不正确的示例(尽管在我的情况下是可行的,但正如我们所说的,我正在更改它们)。竖起大拇指! :)
–约书亚-Pendo
2011年5月12日13:37