【问题标题】:Call a Javascript function every 5 seconds continuously [duplicate]每5秒连续调用一个Javascript函数[重复]
【发布时间】:2011-11-03 12:39:07
【问题描述】:

可能重复:
Calling a function every 60 seconds

我想连续每 5 秒调用一次 Javascript 函数。 我见过 setTimeOut 事件。如果我要连续使用它会正常工作吗?

【问题讨论】:

标签: javascript dom-events


【解决方案1】:

你可以使用setInterval(),参数是一样的。

const interval = setInterval(function() {
   // method to be executed;
 }, 5000);

clearInterval(interval); // thanks @Luca D'Amico

【讨论】:

  • @Anantha:仅供参考,您在最近一次编辑之前(在我编辑之后)(setInterval(methodName,5000))的代码没有使用evaleval 仅在第一个参数作为字符串传递时用于setInterval/setTimeout
  • 附带说明:如果您想停止您的 Interval,您应该调用 clearInterval() 并传递您的 Interval ID 作为参数。
【解决方案2】:

对您的函数执行“递归”setTimeout,它将在每个定义的时间量内继续执行:

function yourFunction(){
    // do whatever you like here

    setTimeout(yourFunction, 5000);
}

yourFunction();

【讨论】:

  • 我很好奇,这最终不会导致内存泄漏吗?
  • @KarlMorrison 不,使用setInterval 会导致内存泄漏。通过使用setTimeout,您可以确保下一个函数调用不会被触发直到上一个函数调用完成。
  • 我们如何摆脱困境?
  • @SarasArya 很容易,您可以在函数范围之外拥有一个变量来保持状态。然后,在再次在函数内部设置超时之前,您进行 IF 检查。所以,根据你需要的逻辑,你根据需要设置或不设置超时时间。
  • @Shef 谢谢...天哪,这很容易。 :P
【解决方案3】:

正如best coding practices 建议的那样,使用setTimeout 而不是setInterval

function foo() {

    // your function code here

    setTimeout(foo, 5000);
}

foo();

请注意,这不是递归函数。该函数在结束前并没有调用自己,而是调用了一个setTimeout 函数,该函数稍后将再次调用相同的函数。

【讨论】:

  • 这也是第一次立即执行代码,而 setInterval 先等待。
  • 如何让这个功能停止?另外,我遇​​到了堆栈溢出。
  • setTimeout 返回一个 timeoutID,然后您可以将其传递给 clearTimeout 以永久停止它。如果您按照答案的示例进行操作,则不会出现堆栈溢出。您可能会递归调用该函数,而不是让 setTimeout 方法调用它
【解决方案4】:

为了在未来重复某个动作,可以使用内置的 setInterval 函数来代替 setTimeout
它有一个相似的签名,所以从一个到另一个的转换很简单:

setInterval(function() {
    // do stuff
}, duration);

【讨论】:

    【解决方案5】:

    这里有很好的工作示例:http://jsfiddle.net/MrTest/t4NXD/62/

    加号:

    • 有很好的fade in / fade out 动画
    • 将暂停:hover
    • 将阻止运行多个动作(在开始第二个之前完成运行动画)
    • 将防止在选项卡中被破坏(浏览器停止选项卡中的脚本)

    经过测试并且可以正常工作!

    【讨论】:

    • 感谢人,它的出色工作很棒......很棒的工作
    • #Iladarsda 有没有办法停止自动淡入淡出,只在下一次点击或上一次点击时淡入淡出
    • 好的答案在答案本身中包含代码,而不仅仅是在另一个网站上。
    猜你喜欢
    • 2017-11-22
    • 2015-05-28
    • 2018-05-17
    • 2013-11-15
    • 2017-10-28
    • 2015-06-22
    • 2023-03-26
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多