【问题标题】:Execute function every nth second每 n 秒执行一次函数
【发布时间】:2010-03-24 22:38:24
【问题描述】:

我制作了这个在 10 秒后点击链接的 sn-p:

function timeout() {
    window.setTimeout(function() {
     $('img.left').click();
    }, 1000);
    setTimeout("timeout()", 1000); 
}
timeout();

我的问题是,如何每 10 秒执行一次这个函数,而不是只执行一次?

这是最好的方法吗,还是有一些你喜欢的漂亮的 jQuery 方法?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用setInterval 而不是setTimeout

    http://javascript.about.com/library/blstvsi.htm

    【讨论】:

    • 请注意,两者之间的关键区别在于:setInterval() 每 X 毫秒运行一次,一系列自调用 setTimeout() 函数将负载函数的实际执行时间考虑在内。有时后者更受欢迎。
    • 此外,如果有东西中断(如触发事件)浏览器,间隔可以排队并连续触发多次。这就是为什么我更喜欢 setTimeout。更多信息:ejohn.org/blog/how-javascript-timers-work
    【解决方案2】:

    setInterval(yourFunction, 1000 * 10);

    (时间以毫秒为单位:1000 为 1 秒,1000 * 10 为 10 秒)

    比“setTimeout”效果更好;更具可读性等。

    【讨论】:

      【解决方案3】:

      我将这种方法用于轮询、定期更新和动画:

      var timerId = setInterval(function() {
      
          if (timeToStopConditionMet) {
              clearInterval(timerId);
              return;
          }
      
          // your recurring code
      
      }, 10000); // 10000 makes this code execute every 10 seconds
      

      【讨论】:

      • 这对于通过 AJAX 进行定期刷新而不占用 CPU 资源是否可以接受?
      • 我没有任何经验数据,但根据我的经验,只要函数相当短且高效,并且调用之间的间隔足够大,CPU 消耗是无关紧要的。就周期性刷新而言,这种方法应该没问题,但不要忘记,如果您对带有附加事件的元素进行 DOM 操作,当它们附加到的元素从 DOM 中删除时,这些事件不会被释放。
      【解决方案4】:

      是的,setInterval(timeout, 1000)几乎做了同样的事情。有点不同的是,下一个间隔在 1000 毫秒后立即开始计数,而不是在运行的脚本完成(甚至开始)之后。出于大多数目的,我正是出于这个原因反对它。你的实现更好,IMO。

      另外,你不需要在字符串中传递timeout函数,你可以直接传递引用,即setTimeout(timeout, 1000)而不是setTimeout("timeout()", 1000)

      【讨论】:

        【解决方案5】:
        window.onload=function(){
            GetCount(dateFuture1, 'countbox1');
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 2020-07-15
          • 1970-01-01
          相关资源
          最近更新 更多