【问题标题】:How do I delay a function call for 5 seconds? [duplicate]如何将函数调用延迟 5 秒? [复制]
【发布时间】:2011-01-19 17:33:46
【问题描述】:

我希望 widget.Rotator.rotate() 在两次调用之间延迟 5 秒...我如何在 jQuery 中执行此操作...似乎 jQuery 的 delay() 不适用于此...

【问题讨论】:

  • 您是希望在两次调用之间延迟 5 秒自动调用它,还是会在响应用户操作时调用它,并且您希望确保它在调用后至少等待 5 秒再次调用之前的最后一次调用?如果是后者,用户是否应该能够将事件排队,或者如果没有经过 5 秒,是否应该忽略输入?
  • 我知道这是重复的,但是由于标题的构成方式,有 5 倍的人会回答这个问题。我们中的许多人都在搜索关键字 delay 而不是 sleep。答案也更笼统。所以,在我看来,在这种情况下,这个问题比另一个问题更重要。

标签: javascript jquery


【解决方案1】:

您可以使用纯 javascript,这将在 5 秒后调用 your_func 一次:

setTimeout(function() { your_func(); }, 5000);

如果你的函数没有参数也没有明确的接收者,你可以直接调用setTimeout(func, 5000)

还有一个插件我用过一次。它有oneTimeeveryTime 方法。

【讨论】:

  • 如果没有函数参数,则无需包装function - 这会很好:setTimeout(your_func, 5000);
  • @Oded 你确定Rotator.rotate()不需要将接收者设置为Rotator吗?如果您执行您的建议,this 将是窗口。
  • @Phrogz - 我说的是setTimout 的机制。
  • 我建议你修改你的答案,说“如果你的函数没有参数并且没有明确的接收者”,或者类似的东西,但措辞对新程序员来说更清楚。
  • 另外,如果你在第一次调用 setTimeout 时使用了 myTimer=setTimeout(...),你可以使用 clearTimeout(myTimer) 来阻止函数被调用。
【解决方案2】:
var rotator = function(){
  widget.Rotator.rotate();
  setTimeout(rotator,5000);
};
rotator();

或者:

setInterval(
  function(){ widget.Rotator.rotate() },
  5000
);

或者:

setInterval(
  widget.Rotator.rotate.bind(widget.Rotator),
  5000
);

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多