Эффекты таймаута jQuery
Я пытаюсь, чтобы элемент затухал, затем в 5000 ms исчезает снова. Я знаю, что могу сделать что-то вроде:
setTimeout(function () { $(".notice").fadeOut(); }, 5000);
Но это будет только контролировать выцветание, добавлю ли я выше в обратный вызов?
Ответы
Ответ 1
Обновление: Как и в 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');
Ответ 2
Я просто понял это ниже:
$(".notice")
.fadeIn( function()
{
setTimeout( function()
{
$(".notice").fadeOut("fast");
}, 2000);
});
Я буду держать сообщение для других пользователей!
Ответ 3
Отличный взлом от @strager. Внесите его в jQuery следующим образом:
jQuery.fn.wait = function (MiliSeconds) {
$(this).animate({ opacity: '+=0' }, MiliSeconds);
return this;
}
И затем используйте его как:
$('.notice').fadeIn().wait(2000).fadeOut('slow');
Ответ 4
Вы можете сделать что-то вроде этого:
$('.notice')
.fadeIn()
.animate({opacity: '+=0'}, 2000) // Does nothing for 2000ms
.fadeOut('fast');
К сожалению, вы не можете просто сделать .animate({}, 2000). Я думаю, что это ошибка, и сообщит об этом.
Ответ 5
Бен Альман написал сладкий плагин для jQuery под названием doTimeout. У него много приятных функций!
Посмотрите здесь: jQuery doTimeout: Как и setTimeout, но лучше.
Ответ 6
Чтобы иметь возможность использовать его так, вам нужно вернуть 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');
Ответ 7
Это можно сделать только с несколькими строками 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);
});
см. скрипку ниже для рабочего примера...