【问题标题】:What's the easiest way to call a function every 5 seconds in jQuery? [duplicate]在 jQuery 中每 5 秒调用一次函数的最简单方法是什么? [复制]
【发布时间】:2011-01-11 08:55:15
【问题描述】:

JQuery,如何每 5 秒调用一次函数。

我正在寻找一种方法来自动更改幻灯片中的图像。

如果可能,我宁愿不安装任何其他 3rd 方插件。

【问题讨论】:

  • +1 表示“如果可能,我宁愿不安装任何第三方插件。”
  • @nickf:因为 jQuery 已经是第 3 方,所以这很幽默? (但不是真的,因为我确信他已经在使用 jQuery 做其他事情了)
  • @Mark,呵呵,不,我不是在讽刺,只是我看到很多人直接跳到插件,即使他们的问题可以用几行普通的 javascript 来解决。
  • 几行古怪的 hack,你永远不知道它可以在哪些浏览器中工作。
  • 请注意,对于那些希望将此技术与 AJAX 请求结合使用的用户 - 不要这样做。让您页面上的每个用户每 N 秒调用一次您的服务器相当于对自己进行 DDOS。如果您需要保持服务器和 UI 同步,请改用 WebSockets。

标签: javascript jquery jquery-plugins timer


【解决方案1】:

您不需要 jquery,在纯 javascript 中,以下将起作用!

var intervalId = window.setInterval(function(){
  /// call your function here
}, 5000);

要停止循环,您可以使用

clearInterval(intervalId) 

【讨论】:

  • 谁说我不能每 2 秒刷新一次 :D
  • @Alucard 提问者没有说明需要停止,所以我说不需要。
  • @andrewb 不过,它对于发现这个问题并且确实需要 clearInterval() 的其他人很有用。
  • 你写了一个比 w3schools 更简洁的函数——走的路!
【解决方案2】:

您可以使用 setInterval 在页面上注册一个间隔,即:

setInterval(function(){ 
    //code goes here that will be run every 5 seconds.    
}, 5000);

【讨论】:

  • 是的,我修好了,打字太快了,知道会很快回复:)
  • 您的开场建议仍然引用 setTimeout :)
  • 好吧,谢谢:) 伙计,太晚了。疲倦时需要停止尝试回答问题。
  • 你总是可以在函数中再次调用setTimeout....这就是我以前这样做的方式>。
  • @Mark Yup,当时间不是很关键,但工作需要定期执行时,我就是这样做的。
【解决方案3】:

订阅 setInterval() 并使用 clearInterval() 停止永远循环的一个很好的例子:

function everyTime() {
    console.log('each 1 second...');
}

var myInterval = setInterval(everyTime, 1000);

调用此行来停止循环:

 clearInterval(myInterval);

【讨论】:

    【解决方案4】:

    第一个答案的小提示。如果您的函数已经定义,请引用该函数但不要调用它!!!所以不要在函数名后面加上任何括号。就像:

    my_function(){};
    setInterval(my_function,10000);
    

    【讨论】:

    • 如果不调用一次,第一次调用会在10000ms内。如果你马上想要一个,你仍然可以正常调用一次。
    • 这个答案为我节省了很多时间;我一直想知道为什么我的函数没有被调用很久。幸运的是,我偶然发现了这个答案; +1
    【解决方案5】:

    上面提到的函数无论在之前的调用中是否完成都会执行,一旦执行完成,这个函数每隔x秒运行一次

    // IIFE
    (function runForever(){
      // Do something here
      setTimeout(runForever, 5000)
    })()
    
    // Regular function with arguments
    function someFunction(file, directory){
      // Do something here
      setTimeout(someFunction, 5000, file, directory)
      // YES, setTimeout passes any extra args to
      // function being called
    }
    

    【讨论】:

      【解决方案6】:

      setIntervalsetTimeout 都可以为您工作(正如@Doug Neiner 和@John Boker 所写现在都指向setInterval)。
      请参阅here 了解更多关于两者的解释,看看哪个最适合您以及如何阻止它们。

      【讨论】:

        【解决方案7】:

        您可以使用 window.setInterval 并且时间必须以毫秒为单位定义,在以下情况下,该函数将在每一秒(1000 毫秒)后调用

        <script>
          var time = 3670;
        window.setInterval(function(){
        
          // Time calculations for days, hours, minutes and seconds
            var h = Math.floor(time / 3600);
            var m = Math.floor(time % 3600 / 60);
            var s = Math.floor(time % 3600 % 60);
        
          // Display the result in the element with id="demo"
          document.getElementById("demo").innerHTML =  h + "h "
          + m + "m " + s + "s ";
        
          // If the count down is finished, write some text 
          if (time < 0) {
            clearInterval(x);
            document.getElementById("demo").innerHTML = "EXPIRED";
          }
        
          time--;
        }, 1000);
        
        
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 2018-05-17
          • 2015-04-30
          • 2012-02-14
          • 2022-08-13
          • 1970-01-01
          相关资源
          最近更新 更多