我创造了某一天的倒计时。但是,我制作的那个似乎并不是出于某种原因。我打算每秒使用setInterval调用它,但它只显示加载页面的时间。
这是代码
// Timer
targetDate = new Date(2014, 8, 22, 0, 0, 0);
function tick(ddate, id) {
var dateNow = new Date();
var amount = ddate.getTime() - dateNow.getTime();
delete dateNow;
if (amount <= 0) {
document.getElementById(id).innerHTML="Now!";
} else {
var days, hours, mins, secs, out;
days = 0; hours = 0; mins = 0; secs = 0; out = "";
amount = Math.floor(amount/1000);
days = Math.floor(amount / 86400);
amount %= 86400;
hours = Math.floor(amount / 3600);
amount %= 3600;
mins = Math.floor(amount / 60);
amount %= 60;
secs = Math.floor(amount);
out += "There are ";
out += (days <= 9?'0':'') + days + " " + ((days == 1)?"day":"days") + ", ";
out += (hours <= 9?'0':'') + hours + " " + ((hours == 1)?"hour":"hours") + ", ";
out += (mins <= 9?'0':'') + mins + " " + ((mins == 1)?"min":"mins") + ", ";
out += (secs <= 9?'0':'') + secs + " " + ((secs == 1)?"sec":"secs") + " ";
out += "until the end of this semester";
document.getElementById(id).innerHTML = out;
}
}
function getCount() {
setInterval(tick(targetDate, "timer"), 1000);
}
window.onload = function() {
getCount();
};
有人可以指出我搞砸的部分,谢谢
答案 0 :(得分:1)
您需要将功能传递给setInterval()
- 您传递调用该功能的结果。
setInterval(function() { tick(targetDate, "timer"); }, 1000);
您的代码调用该函数,然后将返回值(undefined
)传递给setInterval()
。因此,您的代码按要求填充DOM元素,但它只执行一次。 setInterval()
来电被忽略了。相反,如上所述,将函数调用包装在另一个函数中,setInterval()
将按预期工作。
请注意,计时器服务不是非常准确,并且浏览器选项卡未激活时,浏览器不会按计划运行间隔计时器。
答案 1 :(得分:0)
您的代码正在调用该函数,而不是将该函数传递给setInterval。
setInterval接受一个函数
setInterval(function,milliseconds)
以下内容可行:
setInterval(tick, 1000);
请在此处查看工作代码:http://jsfiddle.net/jchen86/s8zF9/