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
?谢谢:)
答案 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);
}