2008-10-30 2 views
47

Я хочу, чтобы затухать элемент и все его дочерние элементы после задержки на несколько секунд. но я не нашел способа указать, что эффект должен начинаться после указанной временной задержки.Задержка эффектов JQuery

+1

Можете ли вы привести пример того, когда дети элемента не исчезли с помощью элемента? – tvanfosson

+1

Извините, моя ошибка, я обновлю сообщение –

ответ

77
setTimeout(function() { $('#foo').fadeOut(); }, 5000); 

5000 - пять секунд в миллисекундах.

+3

Обратите внимание, что это использование встроенной функции setTimeout Javascript, ничего конкретного jQuery. –

+0

Это лишь частично отвечает на его вопрос, я думаю. –

+0

Если дети находятся в элементе #foo, они тоже должны исчезнуть ... – swilliams

1

Вы можете избежать использования setTimeout с помощью метода fadeTo() и установить для него 5-секундную задержку.

$("#hideAfterFiveSeconds").click(function(){ 
    $(this).fadeTo(5000,1,function(){ 
    $(this).fadeOut("slow"); 
    }); 
}); 
+0

Выполнение такого блока очень интенсивно по сравнению с setTimeout. Я не вижу преимущества. - Почему нужно избегать встроенного таймера? – redsquare

43

я использую этот плагин паузы я просто написал

$.fn.pause = function(duration) { 
    $(this).animate({ dummy: 1 }, duration); 
    return this; 
}; 

Зов это следующим образом:

$("#mainImage").pause(5000).fadeOut(); 

Примечание: вам не нужен обратный вызов.


Edit: Теперь вы должны использовать метод jQuery 1.4. built in delay(). Я не проверял, но я предполагаю, что он более «умнее», чем мой плагин.

+0

Это мне очень помогает!Спасибо :-) – Jesse

+0

просто смотрите, если jQuery когда-либо добавляет функцию паузы(), потому что, вероятно, будет лучше, чем у меня! но его хорошо абстрагироваться от того, что вы делаете так: –

+0

может кто-то объяснить ПОЧЕМУ мне не нужен обратный вызов? я не совсем уверен, почему это не сразу возвращается –

1

Я написал плагин, чтобы вы могли добавить задержку в цепочку.

например $ ('# div'). FadeOut(). Delay (5000) .fadeIn(); // исчезать элемент, ждать 5 секунд, затухать элемент обратно.

Он не использует анимационные хаки или чрезмерную цепочку обратного вызова, просто чистый чистый короткий код.

http://blindsignals.com/index.php/2009/07/jquery-delay/

19

Раньше вы могли бы сделать что-то вроде этого

$('#foo').animate({opacity: 1},1000).fadeOut('slow'); 

Первый одушевленные не делает ничего, так как у вас уже есть непрозрачность 1 на элементе, но пауза будет на количество времени ,

В jQuery 1.4 они были встроены в каркас, поэтому вам не нужно использовать хак, как показано выше.

$('#foo').delay(1000).fadeOut('slow'); 

Функциональность такая же, как оригинальный jQuery.delay() плагин http://www.evanbot.com/article/jquery-delay-plugin/4

11

Лучший способ заключается в использовании метода задержки JQuery:.

$ ('# my_id') задержка (2000). FadeOut (2000);

+2

jQuery 1.4 и выше –

Смежные вопросы