连续每 5 秒调用一次 Javascript 函数

IT技术 javascript dom-events
2021-03-05 10:47:25

可能的重复:
每 60 秒调用一次函数

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

5个回答

您可以使用setInterval(),参数是相同的。

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

clearInterval(interval); // thanks @Luca D'Amico
附带说明:如果您想停止您的 Interval,您应该调用clearInterval()将您的 Interval ID 作为参数传递。
2021-04-16 10:47:25
@Anantha:仅供参考,您在最近一次编辑之前(在我编辑之后)( setInterval(methodName,5000))之前拥有的代码没有使用eval. 如果第一个参数作为字符串传递,eval则仅在setInterval/ 中使用setTimeout
2021-05-11 10:47:25

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

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

    setTimeout(yourFunction, 5000);
}

yourFunction();
@KarlMorrison 不,使用setInterval会导致内存泄漏。通过使用setTimeout可以确保下一个函数调用不会被触发,直到前一个函数调用完成。
2021-04-19 10:47:25
@Shef 谢谢...天哪,这很容易。:P
2021-04-23 10:47:25
我们如何摆脱这种局面?
2021-04-26 10:47:25
@SarasArya 很容易,您可以在保存状态的函数范围之外拥有一个变量。然后,在再次在函数内部设置超时之前,您进行 IF 检查。因此,根据您需要的逻辑,您可以根据需要设置超时或不设置。
2021-05-01 10:47:25
我很好奇,这最终不会导致内存泄漏吗?
2021-05-02 10:47:25

作为最佳的编码实践表明,使用setTimeout代替setInterval

function foo() {

    // your function code here

    setTimeout(foo, 5000);
}

foo();

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

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

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

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

好的工作示例:http : //jsfiddle.net/MrTest/t4NXD/62/

加:

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

测试和工作!

#Iladarsda 有什么办法可以停止自动淡入淡出并且只在下一次点击或上一次点击时淡入淡出
2021-04-18 10:47:25
谢谢伙计,它的出色工作很棒......很棒的工作
2021-05-05 10:47:25
好的答案在答案本身中包含代码,而不仅仅是在另一个站点上。
2021-05-13 10:47:25