Javascript set / clearInterval Assist

0


Я внезапно столкнулся, может быть, с небольшой проблемой для тех, кто решает ответить на этот вопрос.
Я пытался сделать следующее:

Создайте

var intrvl; //for interval
function strt() {
     //and set interval
     intrvl = setInterval(writeT,3000);
}
function writeT() {
     //do something here as the interval runs
     checkIf(); //check for the mouse down
}
function checkIf() {
     //here goes the code that checks if mouse is down and if it is
     //then I call another function that begins other useful process
     //I tried
     if (c.addEventListener('click')) { //c is my canvas
          clearInterval(intrvl); //guess clearing the interval yee?
          //and then calling the function I want to call
          startDoing();
     }
}

Я хочу подождать и использовать этот интервал, пока кто-то не нажимает на холст, а затем запускает нужную функцию.
Но всякий раз, когда я нажимаю на холст, функция startDoing() запускается, но слишком быстро сравнивается с ее запуском без всего этого.
Как я могу заставить его работать? Поскольку я хочу, чтобы первый созданный интервал не существовал и startDoing() только startDoing().

Теги:
html5-canvas

1 ответ

1
Лучший ответ

Вы недопонимаете использование addEventListener().

Условие в вашем checkIf() возвращается мгновенно. Таким образом, ваш код

  1. таймер интервала запуска при вызове strt()
  2. добавление обработчика кликов уже по истечении интервала таймера
  3. но также мгновенно останавливает интервал времени er и вызывает startDoing().

Вместо этого используйте его:

var intrvl;
var clicked = false;

function strt() {
     //and set interval
     intrvl = setInterval(checkIf,3000);
}

function checkIf() {
    if ( clicked ) {
        clearInterval( intrvl );
        startDoing();
    }
}

c.addEventListener('click', function() {
    clicked = true;
} );

Этот код мгновенно регистрирует обработчик кликов. Он запускает интервал таймера, как только вызывается strt(). Как только мышь была нажата, щелкнутая переменная установлена так, чтобы отмечать это событие. В следующий раз, когда таймер интервала запускается, он распознает предыдущий щелчок из-за проверки этой переменной и начала того, что вы хотите запустить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню