Тайм-аут эффекты jQuery

Я пытаюсь, чтобы элемент исчезал, а затем через 5000 мс снова исчезал. Я знаю, что могу сделать что-то вроде:

setTimeout(function () { $(".notice").fadeOut(); }, 5000);

Но это будет контролировать только затухание, могу ли я добавить это в обратный вызов?

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
101
0
297 907
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Я только что понял это ниже:

$(".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'); 

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

SolutionYogi 10.07.2009 21:11

потому что, если вы используете очередь, легко добавлять новые события и повторно использовать код, а повторное использование кода - это GoodThing ™

Kent Fredric 11.07.2009 13:28

Обратите внимание, что, как также указано в документации jQuery API, delay () действительно следует использовать только для вещей, связанных с очередью эффектов. Если вам нужен тайм-аут для чего-то еще, setTimeout () по-прежнему подходит.

scy 16.08.2010 13:24

Вау, спасибо за ссылку @bottlenecked, я думаю, причина того, что мой пример так похож на новую функцию, добавленную в jQuery, заключается в том, что этот ответ на bugs.jquery.com/ticket/4102 = P дает заметную цепочку влияния

Kent Fredric 01.11.2011 03:21

Чтобы можно было так использовать, нужно вернуть 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);
});​

см. скрипт ниже для рабочего примера ...

http://jsfiddle.net/eNxuJ/78/

Другие вопросы по теме