Подтвердить что ты не робот

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? Спасибо:)

4b9b3361

Ответ 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);
}