我试图让一个元素淡入,然后在 5000 毫秒内再次淡出。我知道我可以做类似的事情:
setTimeout(function () { $(".notice").fadeOut(); }, 5000);
但这只会控制淡出,我会在回调中添加上述内容吗?
更新:从 jQuery 1.4 开始,您可以使用该.delay( n )
方法。http://api.jquery.com/delay/
$('.notice').fadeIn().delay(2000).fadeOut('slow');
注意:默认情况下不排队,所以如果你想和它们一起使用$.show()
,你需要这样配置它们:$.hide()
$.delay()
$('.notice')
.show({duration: 0, queue: true})
.delay(2000)
.hide({duration: 0, queue: true});
您可以使用 Queue 语法,这可能有效:
jQuery(function($){
var e = $('.notice');
e.fadeIn();
e.queue(function(){
setTimeout(function(){
e.dequeue();
}, 2000 );
});
e.fadeOut('fast');
});
或者你可以非常巧妙地制作一个 jQuery 函数来完成它。
(function($){
jQuery.fn.idle = function(time)
{
var o = $(this);
o.queue(function()
{
setTimeout(function()
{
o.dequeue();
}, time);
});
};
})(jQuery);
这将(理论上,在这里处理内存)允许您这样做:
$('.notice').fadeIn().idle(2000).fadeOut('slow');
我只是在下面想通了:
$(".notice")
.fadeIn( function()
{
setTimeout( function()
{
$(".notice").fadeOut("fast");
}, 2000);
});
我会为其他用户保留帖子!
@strager 的绝妙技巧。像这样将它实现到jQuery中:
jQuery.fn.wait = function (MiliSeconds) {
$(this).animate({ opacity: '+=0' }, MiliSeconds);
return this;
}
然后将其用作:
$('.notice').fadeIn().wait(2000).fadeOut('slow');
你可以这样做:
$('.notice')
.fadeIn()
.animate({opacity: '+=0'}, 2000) // Does nothing for 2000ms
.fadeOut('fast');
可悲的是,你不能只做 .animate({}, 2000) - 我认为这是一个错误,并将报告它。
Ben Alman 为 jQuery 编写了一个不错的插件,名为 doTimeout。它有很多不错的功能!
为了能够这样使用它,您需要 return this
。如果没有返回,fadeOut('slow') 将无法获得执行该操作的对象。
IE:
$.fn.idle = function(time)
{
var o = $(this);
o.queue(function()
{
setTimeout(function()
{
o.dequeue();
}, time);
});
return this; //****
}
然后这样做:
$('.notice').fadeIn().idle(2000).fadeOut('slow');
只需几行 jQuery 就可以做到这一点:
$(function(){
// make sure img is hidden - fade in
$('img').hide().fadeIn(2000);
// after 5 second timeout - fade out
setTimeout(function(){$('img').fadeOut(2000);}, 5000);
});
请参阅下面的小提琴以获取工作示例...