SetInterval и как использовать clearInterval
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
Используйте setTimeout(drawAll, 20)
вместо этого. Это выполняет только один раз.
Ответ 3
clearInterval - один из вариантов:
var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec
function doStuff() {
alert('this is a 2 second warning');
clearInterval(interval);
}
Ответ 4
Боковое примечание. Если вы хотите использовать отдельные функции для установки и очистки интервала, переменная интервала должна быть доступна для всех из них, в области "относительный глобальный" или "один уровень вверх":
var interval = null;
function startStuff(func, time) {
interval = setInterval(func, time);
}
function stopStuff() {
clearInterval(interval);
}