clearInterval не работает и увеличивает интервальную скорость - PullRequest
0 голосов
/ 29 февраля 2020

Я играю в блэкджек, в котором есть таймер. Таймер должен перезапуститься, если игрок решит взять новую карту. Когда я нажимаю кнопку рисования, она сбрасывается, но увеличивает интервальную скорость на 1.

const createCountDown = (isPlayerDrawed = false) => {
  delay = 10;
  let Timer = document.getElementById('timer');
  if (isPlayerDrawed == true) {
    delay = 10;
    clearInterval(timer);
    createCountDown(false);
  } else {
    let timer = setInterval(() => {
      if (delay <= 0) {
        clearInterval(timer);
        stay();
      } else {
        delay--;
        Timer.innerHTML = delay;
      }
    }, 1000)
    console.log(timer)
  }
}

enter image description here

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Ваш let timer ограничен только блоком else. Другие ссылки будут ссылаться на глобальную переменную.

Вот как вы можете заставить ее работать:

let Timer = document.getElementById('timer');
const stay = () => Timer.textContent = "timer expired!";

const createCountDown = (function () {
    let delay, timer;

    function reset() {
        delay = 10;
        clearInterval(timer);
        timer = 0;
        Timer.textContent = "";
    }
    
    reset();
    
    return function () {
        reset();
        Timer.textContent = delay;
        timer = setInterval(() => {
            if (delay <= 0) {
                reset();
                stay();
            } else {
                delay--;
                Timer.textContent = delay;
            }
        }, 1000);
    }
})();
// Optionally start timer immediately:
createCountDown();

document.getElementById('draw').addEventListener("click", createCountDown);
<button id="draw">Draw</button>
<p id="timer"></p>
0 голосов
/ 01 марта 2020
const createCountDown = (isPlayerDrawed = false, delay) => {
counter = delay;
let Timer = document.getElementById('timer');
let interval = null
if (isPlayerDrawed === true) {
    clearInterval(interval);
} else {
    interval = setInterval(() => {
        Timer.innerHTML = counter;

        if (counter <= 0) {
            clearInterval(interval);
            stay();
        } else {
            counter--;
        }

    }, 1000)
}

}

изменение функции, как это работало для меня.

...