Search code examples
javascriptweb-frontend

Stopwatch counter speed double when start is triggered second time


so I know that people here had same Issue, and i have it to and just Don't know how to apply fix on my code. So basicly, when u Click start 2nd time in a row, speed double.

Here is my code

    let secondsNumber = 0
let minutesNumber = 0
let hoursNumber = 0

function start() {
    let interval = setInterval(() => {
        secondsNumber++
        seconds.innerHTML = secondsNumber
        if (secondsNumber == 60) {
            secondsNumber = 0
            minutes.innerHTML = ++minutesNumber + '0'
        }
        if (minutesNumber == 60) {
            minutesNumber = 0
            hours.innerHTML = ++hoursNumber
        }
    }, 1000)



}


function stop() {
    clearInterval(interval)
}


function reset() {
    clearInterval(interval)
    secondsNumber = 00
    minutesNumber = 00
    hoursNumber = 00
    seconds.innerHTML = secondsNumber + '0'
    minutes.innerHTML = minutesNumber + '0'
    hours.innerHTML = hoursNumber + '0'
}

Solution

  • You can limit the button click like this

    • Use interval value to limit start() function
    let interval;
    
    function start() {
        if (interval) {
          return;
        }
    
        interval = setInterval(() => {
            secondsNumber++;
            seconds.innerHTML = secondsNumber;
            if (secondsNumber == 60) {
                secondsNumber = 0;
                minutes.innerHTML = ++minutesNumber + '0';
            }
            if (minutesNumber == 60) {
                minutesNumber = 0;
                hours.innerHTML = ++hoursNumber;
            }
        }, 1000);
    }
    
    • Disable your start button when interval has value

    • Set interval to undefined when stop() and reset() functions are executed

    function stop() {
      if (interval){
        clearInterval(interval);
        interval = undefined;
      }
    }
    
    function reset() {
        if (interval) {
          clearInterval(interval);
          interval = undefined;
          secondsNumber = 00;
          minutesNumber = 00;
          hoursNumber = 00;
          seconds.innerHTML = secondsNumber + '0';
          minutes.innerHTML = minutesNumber + '0';
          hours.innerHTML = hoursNumber + '0';
        }
    }
    

    Now there will be no second click on start function.