javascript - SetInterval 的替代方法是什么?
问题描述
我写了一个倒计时 24 小时计时器,但它很慢,有时我的系统时钟和计时器之间的时间差达到 2 小时。我想知道是否有 setinterval 的替代方法,我将它放在我的代码中。
var _tick = setInterval(function() {
if ((remSeconds) > 0) {
if (hoursCounter > 0) {
if (minutesCounter == 0 && secondsCounter == 0) {
minutesCounter = 60;
hoursCounter = hoursCounter - 1;
}
}
if (secondsCounter == 0) {
secondsCounter = 60;
minutesCounter = minutesCounter - 1;
}
secondsCounter = secondsCounter - 1;
remSeconds = remSeconds - 1;
$seconds.text(formatNumber(secondsCounter));
$minutes.text(formatNumber(minutesCounter));
$hours.text(formatNumber(hoursCounter));
} else {
clearInterval(_tick);
document.getElementById("tRemaining").innerHTML = "EXPIRED";
}
},
1000);
解决方案
你可以这样做:
var startTime = Date.now();
var duration = 1000*60*60*24; // set duration to 24h
var _tick = setInterval(function() {
let remSeconds = Math.floor((duration - (Date.now()-startTime))/1000);
if ((remSeconds) > 0) {
let remHours = Math.floor(remSeconds/3600);
remSeconds -= remHours*3600;
let remMins = Math.floor(remSeconds/60);
remSeconds -= remMins*60;
document.getElementById("tRemaining").innerHTML = remHours+':'+remMins+':'+remSeconds;
}
else {
clearInterval(_tick);
document.getElementById("tRemaining").innerHTML = "EXPIRED";
}
},
1000);
<div id="tRemaining"></div>
如果你想要一个干净的输出,你还需要添加一些东西来处理0
填充,以避免类似的东西23:7:31
,但必不可少的东西就在那里。
推荐阅读
- google-cloud-platform - 如何将 PubSub Push 订阅与 VPC Service Controls 结合使用?
- python - 如何使用 Python 在 Plotly express 中制作水平直方图?
- docker - github 操作:buildx 调用因 gradle 和 docker-push 操作而失败
- django - Django:随时随地附加结果
- javascript - 在 React JS 中根据 JSDiff 更改 CSS
- ruby-on-rails - GraphQL-Ruby。时间类型
- python - tensorflow/keras 中的自定义层 - 这两个选项是否相等?
- android - 在第一次滚动时滞后于 RecyclerView
- homebrew - 通过自制软件安装的传输 cli 位于“settings.json”所在的位置
- python - pytorch 自定义乌尔都语数据加载器(文本和图像)