每2秒启动一次,每5秒启动一次

时间:2014-05-10 11:12:23

标签: javascript

我在stats_check()下面有一个函数,它设置和清除函数stats()的计时器。但问题是这个函数每2秒运行一次,如果条件为真,它会设置计时器并启动stats()。但是我想每2秒检查一次,但是每5秒启动一次功能统计()。我怎样才能做到这一点?

$(function stats_check() {
    var sections = document.getElementsByTagName("section");
    window.setInterval(function() {
        for (i=0; i<sections.length; i++) {
            if (sections[i].className == "present") {
                if (sections[i].id.match(/^stats-.*$/)) {
                    timer = setInterval(function(){stats()}, 5000);
                }
                else {
                    clearInterval(timer);
                }
            }
        }
    }, 2000);
});

1 个答案:

答案 0 :(得分:1)

你可以这样做:

$(function stats_check(){
    var shouldRunTimer = false,
        sections = document.getElementsByTagName("section");
    window.setInterval(function(){
        for(var i=0; i<sections.length; i++) {
            if(sections[i].className === "present") {
                shouldRunTimer = sections[i].id.match(/^stats-.*$/);
            }
        }
    },2000);

    var timer = setInterval(function(){
        if(shouldRunTimer)
            stats();
    }, 5000);
});

function stats(){
    console.log("runs stats");
}

正如在这个小提琴中看到的那样:http://jsfiddle.net/D669N/

这是做什么的:

  • 设置2秒计时器,检查条件
  • 如果条件为真,则允许stats函数运行,否则不允许它
  • 设置5秒计时器,检查是否允许您运行stats功能

此外,我对您的代码进行了一些更正:

  • var添加到for循环中的i。如果你不添加var,它将进入全局范围,这很糟糕,可能会产生很难调试的错误。

  • 使用===代替==来比较className,因为在这种情况下,它优于==

你可以在stackoverflow的其他答案中阅读更多关于这两个最后观察的内容,其中有很多。