如何使用jQuery等待5秒?

And*_*rew 388 jquery

我正在尝试创建页面加载的效果,并在5秒后,屏幕上的成功消息淡出或向上滑动.

我怎样才能做到这一点?

Ale*_*ini 701

内置javascript setTimeout.

setTimeout(
  function() 
  {
    //do something special
  }, 5000);
Run Code Online (Sandbox Code Playgroud)

更新:您希望等待页面加载完成后,将代码放入$(document).ready(...);脚本中.

更新2:jquery 1.4.0介绍了该.delay方法.看看吧.请注意,.delay仅适用于jQuery特效队列.

  • 只是一个旁注 - .delay只适用于jQuery效果队列,因此它非常适合幻灯片和幻灯片.我花了一段时间才意识到它不能用于你可以用jQuery做的其他事情. (66认同)
  • jQuery是用javascript编写的.如果你包含并使用jQuery,你需要javascript.如果你有javascript,你有`setTimeout`. (37认同)
  • .delay(5000)岩石 (18认同)
  • 是的,我知道.我的意思是$('.message').wait(5000).slideUp(); 会好得多.但我认为不存在wait()函数. (4认同)
  • 你可以使用jQuery中的任何东西而不是使用setTimeout吗? (2认同)

Dou*_*ner 59

使用普通的javascript计时器:

$(function(){
   function show_popup(){
      $("#message").slideUp();
   };
   window.setTimeout( show_popup, 5000 ); // 5 seconds
});
Run Code Online (Sandbox Code Playgroud)

这将在DOM准备好后等待5秒.如果你想等到页面实际上loaded你需要使用它:

$(window).load(function(){
   function show_popup(){
      $("#message").slideUp();
   };
   window.setTimeout( show_popup, 5000 ); // 5 seconds
})
Run Code Online (Sandbox Code Playgroud)

编辑:在回答OP的评论,询问是否有办法在jQuery中执行它而不使用setTimeout答案是否定的.但如果你想让它更"jQueryish"你可以像这样包装它:

$.wait = function( callback, seconds){
   return window.setTimeout( callback, seconds * 1000 );
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样调用它:

$.wait( function(){ $("#message").slideUp() }, 5);
Run Code Online (Sandbox Code Playgroud)


Ian*_*ark 41

我遇到了这个问题,我想我会提供有关此主题的更新.jQuery(v1.5 +)包含一个Deferred模型,它(尽管不遵守Promise/A规范,直到jQuery 3) 通常被认为是一种更清晰的方法来处理许多异步问题.$.wait()使用这种方法实现方法特别易读:我相信:

$.wait = function(ms) {
    var defer = $.Deferred();
    setTimeout(function() { defer.resolve(); }, ms);
    return defer;
};
Run Code Online (Sandbox Code Playgroud)

以下是如何使用它:

$.wait(5000).then(disco);
Run Code Online (Sandbox Code Playgroud)

但是,如果在暂停之后,您只希望对单个jQuery选择执行操作,那么您应该使用jQuery的本机.delay(),我相信它也使用Deferred's:

$(".my-element").delay(5000).fadeIn();
Run Code Online (Sandbox Code Playgroud)


mau*_*lus 22

setTimeout(function(){


},5000); 
Run Code Online (Sandbox Code Playgroud)

将代码放在 { }

300 = 0.3 seconds

700 = 0.7 seconds

1000 = 1 second

2000= 2 seconds

2200 = 2.2 seconds

3500 = 3.5 seconds

10000 = 10 seconds
Run Code Online (Sandbox Code Playgroud)

等等

  • 这与[接受的答案](http://stackoverflow.com/a/1836140/1743880)有什么不同? (7认同)
  • 格式化/语法,它提供了更多的时间说明. (2认同)

Jo *_*nau 17

一直使用这个消息覆盖,可以在点击时立即关闭,或者在10秒后自动关闭.

button = $('.status-button a', whatever);
if(button.hasClass('close')) {
  button.delay(10000).queue(function() {
    $(this).click().dequeue();
  });
}
Run Code Online (Sandbox Code Playgroud)


izi*_*tti 9

下划线库还提供了"延迟"功能:

_.delay(function(msg) { console.log(msg); }, 5000, 'Hello');
Run Code Online (Sandbox Code Playgroud)


Ban*_*cid 5

基于乔伊的答案,我想出了一个预期的解决方案(通过jQuery,阅读有关“队列”的信息)。

它在某种程度上遵循jQuery.animate()语法-允许与其他fx函数链接,支持“慢速”和其他jQuery.fx.speeds以及完全的jQuery。如果您停止了动画,并且将以与动画相同的方式进行处理。

可以在这里找到更多用法的jsFiddle测试平台(例如展示.stop())。

解决方案的核心是:

$('<queue/>')
.delay(100 /*ms*/)
.queue( (next) => { $('#result').text('done.'); next(); } );
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

整体作为插件,支持$ .wait()和$(..)。wait()的用法:

// add wait as $.wait() standalone and $(elem).wait() for animation chaining
(function($) {

  $.wait = function(duration, completeCallback, target) {
    $target = $(target || '<queue />');
    return $target.delay(duration).queue(function(next){completeCallback && completeCallback.call($target); next();});
  }

  $.fn.wait = function(duration, completeCallback) {
    return $.wait.call(this, duration, completeCallback, this);
  };

})(jQuery);

//TEST
$(function() {

  // stand alone
  $.wait(1000, function() {
    $('#result')
    .append('...done');
  });

  // chained
  $('#result')
  .append('go...')
  .wait('slow', function() {
    $(this).append('after slow');
  })
  .css({color: 'green'});
  
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

注意:由于wait添加到动画堆栈中,因此$ .css()立即执行-如预期的那样:预期的jQuery行为。