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

连续每5秒调用一个Javascript函数,javascript,dom-events,Javascript,Dom Events,可能重复: 我想连续每5秒调用一个Javascript函数。 我已看到setTimeOut事件。如果我想让它持续运行,它会正常工作吗?您可以使用,参数是相同的 const interval = setInterval(function() { // method to be executed; }, 5000); clearInterval(interval); // thanks @Luca D'Amico 对于将来重复操作,可以使用内置函数代替setTimeout 它具有类似的

可能重复:

我想连续每5秒调用一个Javascript函数。 我已看到setTimeOut事件。如果我想让它持续运行,它会正常工作吗?

您可以使用,参数是相同的

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

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

对于将来重复操作,可以使用内置函数代替
setTimeout

它具有类似的签名,因此从一个到另一个的转换非常简单:

setInterval(function() {
    // do stuff
}, duration);
对函数执行“递归”
setTimeout
,它将在定义的每一个时间段内继续执行:

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

    setTimeout(yourFunction, 5000);
}

yourFunction();

这里有一个很好的工作示例:

加上:

  • 具有漂亮的
    淡入/淡出
    动画
  • 将在
    上暂停:悬停
  • 将阻止运行多个操作(在第二次启动之前完成运行动画)
  • 将防止在选项卡中出现中断(浏览器停止选项卡中的脚本)
测试和工作

按照建议,使用
setTimeout
而不是
setInterval

function foo() {

    // your function code here

    setTimeout(foo, 5000);
}

foo();

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

@Anantha:FYI,您在最近一次编辑之前(在我的编辑之后)的代码(
setInterval(methodName,5000)
),没有使用
eval
eval
仅在第一个参数作为字符串传递的情况下用于
setInterval
/
setTimeout
中。附带说明:如果要停止间隔,应调用
clearInterval()
将间隔ID作为参数传递。谢谢,这项出色的工作非常好。。。。很好#Iladarsda有没有办法停止自动淡入,只在下一次单击或上一次单击时淡入?好的答案本身包含代码,而不仅仅是在另一个网站上。我很好奇,这最终不会导致内存泄漏吗?@KarlMorrison没有,使用
setInterval
会导致内存泄漏。通过使用
setTimeout
可以确保在上一个函数调用完成之前不会触发下一个函数调用。我们如何打破这一局面?@SarasArya很容易,您可以在函数范围之外拥有一个变量,该变量保存一个状态。然后,在再次设置函数内部的超时之前,请执行IF检查。因此,根据您需要的逻辑,您可以根据需要设置超时或不超时。@Shef谢谢。。。天哪,那很容易pdupplicates这也会在第一次执行代码时立即执行,而setInterval会先等待。如何停止此函数?另外,我得到了一个堆栈溢出。setTimeout返回一个timeoutID,然后您可以传递给clearTimeout以永久停止它。如果按照答案的示例进行操作,则不会出现堆栈溢出。您可能以递归方式调用该函数,而不是让setTimeout方法调用它