Aktualizacja: Od wersji jQuery 1.4 możesz używać .delay( n )
metody. http://api.jquery.com/delay/
$('.notice').fadeIn().delay(2000).fadeOut('slow');
Uwaga : $.show()
i $.hide()
domyślnie nie są w kolejce, więc jeśli chcesz $.delay()
z nimi korzystać, musisz je skonfigurować w ten sposób:
$('.notice')
.show({duration: 0, queue: true})
.delay(2000)
.hide({duration: 0, queue: true});
Możesz użyć składni kolejki, to może zadziałać:
jQuery(function($){
var e = $('.notice');
e.fadeIn();
e.queue(function(){
setTimeout(function(){
e.dequeue();
}, 2000 );
});
e.fadeOut('fast');
});
lub możesz być naprawdę pomysłowy i stworzyć funkcję jQuery, która to zrobi.
(function($){
jQuery.fn.idle = function(time)
{
var o = $(this);
o.queue(function()
{
setTimeout(function()
{
o.dequeue();
}, time);
});
};
})(jQuery);
co pozwoliłoby (w teorii pracować tutaj na pamięci):
$('.notice').fadeIn().idle(2000).fadeOut('slow');
Właśnie to rozgryzłem poniżej:
Zachowam ten wpis dla innych użytkowników!
źródło
Świetny hack autorstwa @strager. Zaimplementuj to do jQuery w następujący sposób:
A następnie użyj go jako:
źródło
Możesz zrobić coś takiego:
Niestety, nie możesz po prostu zrobić .animate ({}, 2000) - myślę, że to jest błąd i zgłosimy go.
źródło
Ben Alman napisał słodką wtyczkę do jQuery o nazwie doTimeout. Ma wiele fajnych funkcji!
Sprawdź to tutaj: jQuery doTimeout: Podobnie jak setTimeout, ale lepiej .
źródło
Aby móc z niego korzystać w ten sposób, musisz wrócić
this
. Bez powrotu fadeOut ('slow') nie otrzyma obiektu do wykonania tej operacji.To znaczy:
Następnie zrób to:
źródło
Można to zrobić za pomocą zaledwie kilku wierszy jQuery:
zobacz poniższe skrzypce, aby zobaczyć działający przykład ...
http://jsfiddle.net/eNxuJ/78/
źródło