jquery中的wait()或sleep()函数?

Ste*_*oss 93 jquery

我想添加一个类,等待2秒并添加另一个类.

.addClass("load").wait(2sec).addClass("done");
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

ctc*_*rry 167

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.
Run Code Online (Sandbox Code Playgroud)

  • 目前这是一个糟糕的解决方案,因为它失去了对动画进行jquery控制的优势,比如.stop().一个更好的解决方案是.delay() (2认同)
  • @ user123blahblah ...这是问题的“正确”解决方案(与动画无关)。.delay会在动画队列之外添加千斤顶。谁反对你的错误评论,谁就误导了自己。 (2认同)

Osc*_*son 33

那就是.delay().

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

如果你正在做AJAX的东西,你真的不应该只是自动写"完成"你应该真的等待响应,看看它是否真的完成了.

  • jQUery"delay()"函数决不会提供类似通用"等待"工具的任何功能.它是动画系统的一部分,仅适用于动画队列.该函数始终立即返回,并继续执行而不会暂停. (50认同)

小智 19

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

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

让你这样做:

$('#myElement').addClass('load').wait(2000).addClass('done');
Run Code Online (Sandbox Code Playgroud)


小智 17

delay()不会完成这项工作.delay()的问题在于它是动画系统的一部分,只适用于动画队列.

如果你想在执行动画之外的事情之前等待怎么办?

用这个:

window.setTimeout(function(){
                 // do whatever you want to do     
                  }, 600);
Run Code Online (Sandbox Code Playgroud)

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

一旦我弄明白这一点,这对我帮助很大,并希望它也会对你有所帮助!