【问题标题】:Why is my `minutes` number goes into negatives?为什么我的“分钟”数变为负数?
【发布时间】:2021-02-05 01:21:31
【问题描述】:

我已经做了几个星期的计时器了。当我尝试从 0 中减去分钟时,它会在不触及小时的情况下变为负数。我尝试了一些方法,阅读了文档,并观看了几个 YouTube 视频,但没有一个对我有帮助。这是我使用的代码:

seconds--;
    if (seconds === 0) {
        seconds = 59;
        minutes--;
        if (minutes < 10) {
            minutesText.innerText = '0' + minutes.toString()
        } else {
            minutesText.innerText = minutes;
        }
        if (minutes === 0) {
            minutes = 59;
            hours--;
            if (hours < 10) {
                hoursText.innerText = '0' + hours.toString()
            } else {
                hoursText.innerText = hours;
            }
            if (hours === 0) {
                window.clearInterval(interval);
            }
        }

    }
    if (seconds < 10) {
        secondsText.innerText = '0' + seconds.toString();
    } else {
        secondsText.innerText = seconds;
    }

它永远不会触及 hours-- 并且不会使分钟等于 59。

(对不起,如果这是一个简单的修复,我刚刚开始使用 JS)

【问题讨论】:

  • 提示:当minutes0 时,minutes-- 会做什么? minutes === 0 会捕捉到这种情况吗?

标签: javascript loops if-statement


【解决方案1】:

你有几个问题:

  1. 您正在更新minutesText.innerText 之前您检查minutes 是否为0,因此需要更改为59。它应该在 if (minutes === 0) 块之后。
  2. 您需要检查值是否为0 您减少它们,否则您将永远无法捕捉到0 值。

这个 sn-p 包含了这些修复。

let hoursText = document.getElementById('hours');
let minutesText = document.getElementById('minutes');
let secondsText = document.getElementById('seconds');


function updateTimer() {
  hours = +hoursText.innerText;
  minutes = +minutesText.innerText;
  seconds = +secondsText.innerText;
  if (seconds === 0) {
    seconds = 59;
    if (minutes === 0) {
      minutes = 59;
      if (hours === 0) {
        window.clearInterval(interval);
        return;
      } else {
        hours--;
      }
      if (hours < 10) {
        hoursText.innerText = '0' + hours.toString()
      } else {
        hoursText.innerText = hours;
      }
    } else {
      minutes--;
    }
    if (minutes < 10) {
      minutesText.innerText = '0' + minutes.toString()
    } else {
      minutesText.innerText = minutes;
    }
  } else {
    seconds--;
  }
  if (seconds < 10) {
    secondsText.innerText = '0' + seconds.toString();
  } else {
    secondsText.innerText = seconds;
  }
}

interval = setInterval(updateTimer, 1000);
&lt;div&gt;&lt;span id="hours"&gt;00&lt;/span&gt;:&lt;span id="minutes"&gt;01&lt;/span&gt;:&lt;span id="seconds"&gt;13&lt;/span&gt;&lt;/div&gt;

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 2011-01-15
    相关资源
    最近更新 更多