javascript - Javascript Timer 不一致
问题描述
代码运行一段时间后,倒数计时器并不一致,并留下数秒的间隙。它仍然继续倒计时,但会在特定计数上停留几秒钟,然后在几秒钟后用另一个数字刷新。
这是倒计时功能。有任何想法吗?
function countdownTimer(){
//--Countdown til next TIME
//--First, let's get today's date to do the calculation later
var dM = new Date();
var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
var todayMonth = months[dM.getMonth()];
var dD = new Date();
var todayDate = dM.getDate();
var dY = new Date();
var todayYear = dM.getFullYear();
//--Then let's set the countdown time to the next TIME
if(window.nextTime == fajrTime){
var tomorrow = todayDate + 1;
var todayDate = tomorrow + " " + todayMonth + "," + todayYear + " " + window.nextTime;
}else{
var todayDate = todayDate + " " + todayMonth + "," + todayYear + " " + window.nextTime;
}
//-- Let's do the countdown calculation
var deadline = new Date((todayDate)).getTime();
window.x = setTimeout(function() {
var now = new Date().getTime();
var t = deadline - now;
var hours = Math.floor((t%(1000 * 60 * 60 * 24))/(1000 * 60 * 60)) +".";
var minutes = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)) +".";
var seconds = Math.floor((t % (1000 * 60)) / 1000);
document.getElementById("hour").innerHTML =hours;
document.getElementById("minute").innerHTML = minutes;
document.getElementById("second").innerHTML =seconds;
if (t < 0) {
clearInterval(window.x);
document.getElementById("hour").innerHTML ='0';
document.getElementById("minute").innerHTML ='0' ;
document.getElementById("second").innerHTML = '0'; }
update();
}, 1000);
}
解决方案
编辑:然后我想在您的程序中某处存在一些阻塞代码,导致在一个间隔结束和下一个开始之间的某处出现延迟。尝试使用 setInterval 方法并将任何可能暂停执行的代码移出间隔函数。
原文:尝试重构代码以使用 setInterval(function, milliseconds) 而不是 setTimeout(function, milliseconds)。根据我的经验,最好使用内置逻辑而不是自己编写。