如何在页面加载时启动脚本,然后使用setInterval

时间:2013-11-23 21:21:56

标签: javascript jquery

我有一个函数,timer(),我希望在页面加载时立即运行一次,然后每隔一秒运行一次。

目前我使用setInterval有以下代码:

$(document).ready(function() {
 var timer = function(){
    ...
}

timer();

setInterval(function(){
      timer();
}, 1000);
});

注意,我不仅仅想单独使用setInterval,因为这会在页面加载后产生1秒延迟

但是,我使用了timer();似乎停止了页面上的其他脚本工作。有任何想法吗?控制台中没有错误。

2 个答案:

答案 0 :(得分:2)

我改用setTimeout()

$(document).ready(function() {
    var timerLoop;
    var timer = function(){
                ...
            timerLoop = setTimeout(timer, 1000);
        };
    timer();
}

注意timerLoop变量,如果需要,可以用它来停止“间隔”(clearTimeout(timerLoop);)。

Timeouts并非真正异步,它们只是定时的。如果还有另一个脚本在运行,则在上一个脚本完成后执行定时脚本。

我更喜欢setTimeout()而不是seInterval(),因为后者有一个缺点:如果有另一个脚本阻止setInterval()设置的定时调用的执行,这些调用会堆叠,阻塞脚本完成后,所有堆叠的调用都会尽快执行。通常这是不受欢迎的行为。

答案 1 :(得分:0)

尝试console.log(timer),您会清楚地看到它是一个数字,而不是您可以调用的函数。

相反,您必须手动调用该函数以及设置计时器。

function timer() {
    // do something
}
$(function() {
    timer();
    setInterval(timer,1000);
});

或者,您可以使用重复的超时:

function timer() {
    // do something
    setTimeout(timer,1000);
}
$(timer);