Search code examples
javascripthtmlbuttontimercounter

Adding Start, Stop, Reset button for timer


I have this count-up timer code and want to add start, stop and reset button. It start right at the page load.

<script type="text/javascript">
    var timerVar = setInterval(countTimer, 1000);
    var totalSeconds = 0;

    function countTimer() {
       ++totalSeconds;
       var hour = Math.floor(totalSeconds /3600);
       var minute = Math.floor((totalSeconds - hour*3600)/60);
       var seconds = totalSeconds - (hour*3600 + minute*60);

       document.getElementById("hour").innerHTML =hour;
       document.getElementById("minute").innerHTML =minute;
       document.getElementById("seconds").innerHTML =seconds;
    }
</script>

Solution

  • It's just some simple manipulation of hour, minute and seconds and making use of clearInterval and setInterval. In my snipper, reset won't stop the timer, but it's easy to make that happen by a few lines of code.

    window.onload = () => {
      let hour = 0;
      let minute = 0;
      let seconds = 0;
      let totalSeconds = 0;
      
      let intervalId = null;
      
      function startTimer() {
        ++totalSeconds;
        hour = Math.floor(totalSeconds /3600);
        minute = Math.floor((totalSeconds - hour*3600)/60);
        seconds = totalSeconds - (hour*3600 + minute*60);
    
        document.getElementById("hour").innerHTML =hour;
        document.getElementById("minute").innerHTML =minute;
        document.getElementById("seconds").innerHTML =seconds;
      }
    
      document.getElementById('start-btn').addEventListener('click', () => {
        intervalId = setInterval(startTimer, 1000);
      })
      
      document.getElementById('stop-btn').addEventListener('click', () => {
        if (intervalId)
          clearInterval(intervalId);
      });
      
       
      document.getElementById('reset-btn').addEventListener('click', () => {
         totalSeconds = 0;
         document.getElementById("hour").innerHTML = '0';
         document.getElementById("minute").innerHTML = '0';
         document.getElementById("seconds").innerHTML = '0';
      });
    }
    <div>Hour: <span id="hour"></span></div>
    <div>Minute: <span id="minute"></span></div>
    <div>Second: <span id="seconds"></span></div>
    
    <button id="start-btn">Start</button>
    <button id="stop-btn">Stop</button>
    <button id="reset-btn">Reset</button>