var orderTimeOut = 900000;
var timer = setInterval(() => {
orderTimeOut -= 10;
if (orderTimeOut > 10) {
times = overTime(orderTimeOut);
console.log(times)
}else {
orderTimeOut = 0;
times = "00:00:00";
}
}, 10);
function overTime(time) {
var a = (time % 1000).toString().substr(0, 2);
var b = Math.floor(time / 1000);
var m = b % 60;
m = String(m);
m = m.length >= 2 ? m : "0" + m;
var f = Math.floor(time / (1000 * 60));
f = String(f);
f = f.length >= 2 ? f : "0" + f;
return f + ":" + m + "." + a;
}
这段方法 能够正常进行倒计时,但是观察到,它似乎越跑越慢.....
无论是
setInterval
还是setTimeout
,时间肯定是不对的。计时器逻辑是
task
执行完成后,查看timer
是否过时,如果过时,执行timer
回调。也就是说如果有同步方法在运行,那么计时器的回调就会延后,而如果倒计时很久,这个延后的时间累加就会造成和真实时间不同步。