【问题标题】:Timer ends but displays 0:01计时器结束但显示 0:01
【发布时间】:2023-03-15 07:05: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

【问题讨论】:

    标签: javascript timer clearinterval


    【解决方案1】:

    您需要稍微重新排列代码。尤其是你的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--

    【讨论】:

      【解决方案2】:

      问题是当您停止计时器(计时器 == 0)时,您不会再刷新一次显示。像这样更改您的代码

      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) {
                stopTimer();
                timer = duration;
              }
            }, 1000);
          }
      
      

      【讨论】:

        猜你喜欢
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多