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

用户名

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

$(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);
});
安德烈

您可以这样做:

$(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功能

我也对您的代码做了一些更正:

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

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

您可以在关于stackoverflow的其他答案中了解有关最后2个观察值的更多信息,其中有很多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章