我有一个倒计时脚本,但我有2个问题。 1.我的倒计时从未达到0并且停止,所以我得到一个连续的负数。 2.计数器只显示在chrome而不是firefox或Internet explorer。我如何解决这两个问题?
var sec, min, hr, day, timer, expireDate;
sec = 1000;
min = 60 * 1000;
hr = 60 * 60 * 1000;
day = 24 * 60 * 60 * 1000;
timer;
expireDate = new Date('Mon Sep 17 2012 14:26:00 GMT-0700');
timer = setInterval(function() {
var currentDate, countdown, days, hours, minutes, seconds;
currentDate = new Date();
countdown = expireDate - currentDate;
if (countdown === 0 ) {
window.clearInterval(timer);
document.getElementById('countdown').innerHTML = 'EXPIRED!';
}
days = Math.floor(countdown / day);
hours = Math.floor((countdown % day) / hr);
minutes = Math.floor((countdown % hr) / min);
seconds = Math.floor((countdown % min) / sec);
console.log(countdown);
document.getElementById('countdown').innerHTML = days + " " + hours + " " + minutes + " " + seconds;
}, 1000);
答案 0 :(得分:2)
在这两行中:
currentDate = new Date();
countdown = expireDate - currentDate;
你得到当前时间和预期时间之间的差异,精确到毫秒!
如果它没有达到正确的值,它就会越过它。
将===
测试更改为<=
答案 1 :(得分:1)
正如其他人所说,您应该使用< 0
。
此外,一旦满足您的过期条件,您将立即覆盖EXPIRED!
标签,因此您永远不会看到它。您需要将if
后面的代码移到else
中,或者只需在if
内返回。
if (countdown <= 0 ) {
window.clearInterval(timer);
document.getElementById('countdown').innerHTML = 'EXPIRED!';
} else {
days = Math.floor(countdown / day);
hours = Math.floor((countdown % day) / hr);
minutes = Math.floor((countdown % hr) / min);
seconds = Math.floor((countdown % min) / sec);
console.log(countdown);
document.getElementById('countdown').innerHTML = days + " " + hours + " " + minutes + " " + seconds;
}
最后,它在IE中不起作用的原因可能是console.log
。如果您当时没有打开控制台,IE将失败。只需删除console.log
行,这在IE中就可以了。
答案 2 :(得分:0)
您将时间与毫秒进行比较!你必须非常幸运地完成这项工作:
currentDate = new Date();
countdown = expireDate - currentDate;
尝试:
if (countdown < 0 ) {