2011-04-19 1449 views

回答

141

setTimeout将在延迟一段时间(以毫秒为单位)后执行一些代码。然而,一个重要的注意事项:由于JavaScript的本质,代码的其余部分继续计时器后运行的设置:

$('#someid').addClass("load"); 

setTimeout(function(){ 
    $('#someid').addClass("done"); 
}, 2000); 

// Any code here will execute immediately after the 'load' class is added to the element. 
+1

目前这是一个糟糕的解决方案,因为它失去了jquery控制动画的优势,如.stop()。一个更好的解决方案是.delay() – user151496 2015-05-11 16:22:46

2

有一个功能,但它是多余的: http://docs.jquery.com/Cookbook/wait

这个小片段,您可以等待:

$.fn.wait = function(time, type) { 
    time = time || 1000; 
    type = type || "fx"; 
    return this.queue(type, function() { 
     var self = this; 
     setTimeout(function() { 
      $(self).dequeue(); 
     }, time); 
    }); 
}; 
+3

该函数仅影响(an)动画队列中的代码。 – Pointy 2011-04-19 21:57:05

35

这会是.delay()

http://api.jquery.com/delay/

如果你正在做的东西AJAX寿,你真的不应该只是自动写入“完成”你真的应该等待响应,看看它是否实际上已经完成了。

+1

另外Steven你想''.removeClass('load')'否则你添加这两个类的加载和完成,这可能是不希望的。如果您确实在等待异步操作完成,那么最好的办法就是在.addClass完成并且成功时,如果没有.addClass('错误')也许是一个想法 – 2011-04-19 21:41:25

+38

jQUERY“delay()”函数在no方式提供了类似于通用“等待”设施的任何东西。它是动画系统的一部分,仅适用于动画队列。该函数总是立即返回,然后继续执行而不会暂停。 – Pointy 2011-04-19 21:53:37

18

意识到这是一个老问题,但我写了一个插件来解决这个问题问题有人可能会觉得有用。

https://github.com/madbook/jquery.wait

让你这样做:

$('#myElement').addClass('load').wait(2000).addClass('done'); 
+1

非常感谢你madlee! – Blauhirn 2015-11-07 21:55:00

-1

使用setTimeout函数,例如Visit here for example

+16

最好不要依赖大多数答案的链接 – 2013-08-23 19:12:26

+3

要备份@JamesJenkins评论,这是因为链接并不总是可靠的。如果一个人要添加一个链接,最好在代码中包含代码本身。 – Tass 2016-04-22 16:29:14

11

延迟()不会做的工作。 delay()的问题是它是动画系统的一部分,只适用于动画队列。

如果您想在执行动画以外的动画之前等待该怎么办?

使用此:

window.setTimeout(function(){ 
       // do whatever you want to do  
        }, 600); 

,会发生什么?:在这种情况下它执行花括号内指定的代码之前等待600毫秒。

一旦我想出来,希望它能帮助你,这对我有很大帮助!