JavaScript计时器不会每秒计数

时间:2014-08-03 15:18:26

标签: javascript timer setinterval

我创造了某一天的倒计时。但是,我制作的那个似乎并不是出于某种原因。我打算每秒使用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();
};

有人可以指出我搞砸的部分,谢谢

2 个答案:

答案 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/