首页 > 解决方案 > 计时器结束但显示 0:01

问题描述

代码工作正常,但是当计时器结束时,它显示 0:01 而不是 0:00。

<html>

  <body>   
    <div>
        <span id="time6" class="timer">00:06</span>
        
        <br/>
    
          <button onclick="start6Timer()" class="start-button">start</button>
    
          <button onclick="resetTimer()" class="reset-button">reset</button>
          
          <p>To reset press reset and then start.</p>
    </div>
  </body>

  <script>
    let timerId;
    function startTimer(duration, display) {
      var timer = duration,
        minutes, seconds;
      timerId = setInterval(function() {
        minutes = parseInt(timer / 60, 10);
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.textContent = minutes + ":" + seconds;

        if (--timer < 0) {
          timer = duration;
        }
        
        if (timer == 0){
            stopTimer();
        }
      }, 1000);
    }
    
   function start6Timer() {
          var sixSeconds = 60 * 0.1,
          display = document.querySelector('#time6');
          startTimer(sixSeconds, display);
        };
        
        function resetTimer() {
              clearInterval(timerId);
            }
            
        function stopTimer() {
            clearInterval(timerId);
            }
        
  </script>
</html>

我需要它在任何计时器结束时显示它,我有多个使用 startTimer 函数的计时器,但是当任何计时器结束时如何显示 0:00 时我感到很困惑。

这是带有我的代码的 W3school Tryit 编辑器的链接:https ://www.w3schools.com/code/tryit.asp?filename=GJRWXNYJMDYS

标签: javascripttimerclearinterval

解决方案


您需要稍微重新排列代码。特别是你的setInterval部分:

timerId = setInterval(function() {

  if (--timer < 0) {
    timer = duration;
  }

  minutes = parseInt(timer / 60, 10);
  seconds = parseInt(timer % 60, 10);

  minutes = minutes < 10 ? "0" + minutes : minutes;
  seconds = seconds < 10 ? "0" + seconds : seconds;

  display.textContent = minutes + ":" + seconds;

  if (timer == 0){
    stopTimer();
  }
}, 1000);

问题是您timer--在计算分钟和秒后调用。但是,您需要做的是在此之前计算 timer--


推荐阅读