javascript - 计时器结束但显示 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
解决方案
您需要稍微重新排列代码。特别是你的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--
推荐阅读
- listview - 添加列表
动态到 ListView.children - c# - 存储库接口命名约定
- java - Javafx-图像到PDF转换使用PDFBox显示一半图像
- mysql - 为什么连接字符串只能在开发机器上工作?
- angular - 如何在使用 Angular CLI 创建的库项目中包含资产?
- c - 代码在输出 C 处无法正常工作
- itext7 - iText 7 pdhHtml 将表格行保持在一起
- java - error-starting-applicationcontext-to-display-the-auto-configuration-report
- c# - 从控制台或 Windows 服务以编程方式创建 Windows 会话
- openlayers - 如何在 openlayers 4.x 中移动、旋转多边形?