
Я только что понял это ниже:
$(".notice")
.fadeIn( function()
{
setTimeout( function()
{
$(".notice").fadeOut("fast");
}, 2000);
});
Сохраню пост для других пользователей!
Вы можете сделать что-то вроде этого:
$('.notice')
.fadeIn()
.animate({opacity: '+=0'}, 2000) // Does nothing for 2000ms
.fadeOut('fast');
К сожалению, вы не можете просто использовать .animate ({}, 2000) - я думаю, что это ошибка, и сообщу о ней.
Обновлять: Начиная с 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});
Вы могли бы использовать синтаксис очереди, это может сработать:
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');
потому что, если вы используете очередь, легко добавлять новые события и повторно использовать код, а повторное использование кода - это GoodThing ™
Обратите внимание, что, как также указано в документации jQuery API, delay () действительно следует использовать только для вещей, связанных с очередью эффектов. Если вам нужен тайм-аут для чего-то еще, setTimeout () по-прежнему подходит.
Вау, спасибо за ссылку @bottlenecked, я думаю, причина того, что мой пример так похож на новую функцию, добавленную в jQuery, заключается в том, что этот ответ на bugs.jquery.com/ticket/4102 = P дает заметную цепочку влияния
Чтобы можно было так использовать, нужно вернуть this. Без возврата fadeOut ('slow') не получит объект для выполнения этой операции.
То есть:
$.fn.idle = function(time)
{
var o = $(this);
o.queue(function()
{
setTimeout(function()
{
o.dequeue();
}, time);
});
return this; //****
}
Затем сделайте это:
$('.notice').fadeIn().idle(2000).fadeOut('slow');
Бен Алман написал замечательный плагин для jQuery под названием doTimeout. В нем много приятных функций!
Посмотрите здесь: jQuery doTimeout: как setTimeout, но лучше.
Отличный хак от @strager. Реализуйте это в jQuery следующим образом:
jQuery.fn.wait = function (MiliSeconds) {
$(this).animate({ opacity: '+=0' }, MiliSeconds);
return this;
}
А затем используйте его как:
$('.notice').fadeIn().wait(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);
});
см. скрипт ниже для рабочего примера ...
Мне интересно, почему вы используете очередь, когда простое использование setTimeout также будет работать.