如何等待5秒钟的jQuery?
我试图在页面加载的时候创build一个效果,5秒之后,屏幕上的成功消息淡出或者向上滑动。
我怎样才能做到这一点?
内置javascript setTimeout 。
setTimeout( function() { //do something special }, 5000);
更新 :你想等待,因为当页面完成加载,所以把这个代码在你的$(document).ready(...);
脚本。
更新2 :jquery 1.4.0引入了.delay
方法。 检查出来 。 请注意,.delay仅适用于jQuery特效队列。
使用正常的JavaScript计时器:
$(function(){ function show_popup(){ $("#message").slideUp(); }; window.setTimeout( show_popup, 5000 ); // 5 seconds });
这将在DOM准备好之后等待5秒钟。 如果你想等到页面实际loaded
你需要使用这个:
$(window).load(function(){ function show_popup(){ $("#message").slideUp(); }; window.setTimeout( show_popup, 5000 ); // 5 seconds })
编辑:在回答OP的评论询问是否有办法做到这一点在jQuery和不使用setTimeout
答案是否定的。 但是如果你想让它更“jQueryish”,你可以这样包装它:
$.wait = function( callback, seconds){ return window.setTimeout( callback, seconds * 1000 ); }
你可以这样称呼它:
$.wait( function(){ $("#message").slideUp() }, 5);
我遇到了这个问题,我想我会提供一个关于这个话题的更新。 jQuery(v1.5 +)包含一个Deferred
模型, 尽pipe在jQuery 3之前不遵守Promises / A规范,但它通常被认为是解决许多asynchronous问题的更清晰的方法。 我相信使用这种方法实现$.wait()
方法是特别可读的:
$.wait = function(ms) { var defer = $.Deferred(); setTimeout(function() { defer.resolve(); }, ms); return defer; };
以下是如何使用它:
$.wait(5000).then(disco);
但是,如果在暂停之后,只希望对单个jQueryselect执行操作,那么您应该使用jQuery的本机.delay()
,我相信它也使用了Deferred's:
$(".my-element").delay(5000).fadeIn();
一直在使用这一个消息覆盖,可以立即closures点击或10秒钟后自动closures。
button = $('.status-button a', whatever); if(button.hasClass('close')) { button.delay(10000).queue(function() { $(this).click().dequeue(); }); }
setTimeout(function(){ },5000);
将您的代码置于{ }
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
等等
Underscore库还提供了一个“延迟”function:
_.delay(function(msg) { console.log(msg); }, 5000, 'Hello');
根据乔伊的回答,我想出了一个意图(通过jQuery,阅读“队列”)的解决scheme。
它遵循jQuery.animate()语法 – 允许与其他fx函数链接,支持“slow”和其他jQuery.fx.speeds以及完全的jQuery。 如果你停下来的话,将会和animation一样处理。
js用更多的用法(比如炫耀.stop())来进行testing,可以在这里find。
解决scheme的核心是:
$('<queue/>') .delay(100 /*ms*/) .queue( (next) => { $('#result').text('done.'); next(); } );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="result"></div>
$( "#foo" ).slideUp( 300 ).delay( 5000 ).fadeIn( 400 );