Respostas:
Atualização: A partir do jQuery 1.4, você pode usar o .delay( n )
método. http://api.jquery.com/delay/
$('.notice').fadeIn().delay(2000).fadeOut('slow');
Observação : $.show()
e $.hide()
por padrão não estão na fila, então se você quiser usar $.delay()
com eles, você precisa configurá-los desta forma:
$('.notice')
.show({duration: 0, queue: true})
.delay(2000)
.hide({duration: 0, queue: true});
Você poderia usar a sintaxe da fila, isso pode funcionar:
jQuery(function($){
var e = $('.notice');
e.fadeIn();
e.queue(function(){
setTimeout(function(){
e.dequeue();
}, 2000 );
});
e.fadeOut('fast');
});
ou você poderia ser realmente engenhoso e fazer uma função jQuery para fazer isso.
(function($){
jQuery.fn.idle = function(time)
{
var o = $(this);
o.queue(function()
{
setTimeout(function()
{
o.dequeue();
}, time);
});
};
})(jQuery);
que (em teoria, trabalhando na memória aqui) permitiria que você fizesse isso:
$('.notice').fadeIn().idle(2000).fadeOut('slow');
Excelente hack de @strager. Implemente-o no jQuery assim:
jQuery.fn.wait = function (MiliSeconds) {
$(this).animate({ opacity: '+=0' }, MiliSeconds);
return this;
}
E então use-o como:
$('.notice').fadeIn().wait(2000).fadeOut('slow');
Ben Alman escreveu um plugin legal para jQuery chamado doTimeout. Tem muitos recursos interessantes!
Confira aqui: jQuery doTimeout: como setTimeout, mas melhor .
Para poder usar assim, você precisa voltar this
. Sem o retorno, fadeOut ('lento'), não obterá um objeto para executar essa operação.
Ie:
$.fn.idle = function(time)
{
var o = $(this);
o.queue(function()
{
setTimeout(function()
{
o.dequeue();
}, time);
});
return this; //****
}
Então faça isto:
$('.notice').fadeIn().idle(2000).fadeOut('slow');
Isso pode ser feito com apenas algumas linhas de 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);
});
veja o violino abaixo para um exemplo funcional ...