javascript - 如何阻止我的 JavaScript 计时器重置?

标签 javascript html

我这里有一个倒计时器

当到达 0:00 时,我希望它在这里结束并只显示 0:00。但2分钟后又重置了

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

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

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

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

window.onload = function () {
    var twoMinutes = 60 * 2,
        display = document.querySelector('#time');
    startTimer(twoMinutes, display);
};
<span id="time">2:00</span>

最佳答案

当间隔达到 0 时,您需要将其清除,而不是重置为持续时间。

注意:你的函数在第一次迭代时似乎有点滞后,这是因为第一次计算与 html 中的值相同。如果这不是故意的,您可以在间隔逻辑之前将计时器值减 1 来修复此问题。

function startTimer(duration, display) {
    var timer = duration, minutes, seconds;
    var intervalID = setInterval(function () {
        minutes = parseInt(timer / 60, 10);
        seconds = parseInt(timer % 60, 10);

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

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

        if (--timer < 0) {
            clearInterval(intervalID)
        }
    }, 1000);
}

window.onload = function () {
    var display = document.querySelector('#time');
    startTimer(5, display);
};
<span id="time">0:05</span>

关于javascript - 如何阻止我的 JavaScript 计时器重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76073442/

相关文章:

javascript - Socket.io + Node.js + Apache

javascript - 在多个 settimeout 上使用 Async/Await

javascript - 如何避免 javascript `window.open` 触发弹出窗口警报

javascript - 如果日期是今天,AngularJS 在 div 中显示,否则在其他 div 中显示

javascript - 缩小 NodeJS 中使用的代码是否有意义?

html - main.css 中的颜色和字体大小问题。怎么修?

javascript - 将鼠标悬停在外部 Div 上时淡入淡出

javascript - AngularJS 商业网站

javascript - 如何知道 Ul 元素的确切子代数?

HTML <select> defaultValue 属性(但不是 <option selected ='selected' > 变体)