Effets jQuery de timeout


101

J'essaie de faire apparaître un élément, puis de revenir en arrière dans 5000 ms. Je sais que je peux faire quelque chose comme:

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

Mais cela ne contrôlera que le fondu, est-ce que j'ajouterais ce qui précède au rappel?

Réponses:


197

Mise à jour: à partir de jQuery 1.4, vous pouvez utiliser la .delay( n )méthode. http://api.jquery.com/delay/

$('.notice').fadeIn().delay(2000).fadeOut('slow'); 

Remarque : $.show()et $.hide()par défaut ne sont pas mis en file d'attente, donc si vous souhaitez les utiliser $.delay()avec eux, vous devez les configurer de cette façon:

$('.notice')
    .show({duration: 0, queue: true})
    .delay(2000)
    .hide({duration: 0, queue: true});

Vous pouvez éventuellement utiliser la syntaxe Queue, cela peut fonctionner:

jQuery(function($){ 

var e = $('.notice'); 
e.fadeIn(); 
e.queue(function(){ 
  setTimeout(function(){ 
    e.dequeue(); 
  }, 2000 ); 
}); 
e.fadeOut('fast'); 

}); 

ou vous pourriez être vraiment ingénieux et créer une fonction jQuery pour le faire.

(function($){ 

  jQuery.fn.idle = function(time)
  { 
      var o = $(this); 
      o.queue(function()
      { 
         setTimeout(function()
         { 
            o.dequeue(); 
         }, time);
      });
  };
})(jQuery);

ce qui vous permettrait (en théorie, travailler ici sur la mémoire) de faire ceci:

$('.notice').fadeIn().idle(2000).fadeOut('slow'); 

1
Je me demande pourquoi vous utilisez la file d'attente alors qu'une simple utilisation de setTimeout fonctionnera également.
SolutionYogi

33
parce que si vous utilisez la file d'attente, il est facile d'ajouter de nouveaux événements et de réutiliser le code, et la réutilisation de code est un GoodThing ™
Kent Fredric

2
Notez que, comme également indiqué dans la documentation de l'API jQuery, delay () ne devrait vraiment être utilisé que pour les choses liées à la file d'attente d'effets. Si vous avez besoin d'un délai pour autre chose, setTimeout () est toujours la voie à suivre.
scy

Wow, merci pour le lien @bottlenecked, je suppose que la raison pour laquelle mon exemple est si similaire à la nouvelle fonctionnalité ajoutée à jQuery est qu'il y a une chaîne d'influence notable de cette réponse à bugs.jquery.com/ticket/4102 = P
Kent Fredric

23

Je viens de le comprendre ci-dessous:

$(".notice")
   .fadeIn( function() 
   {
      setTimeout( function()
      {
         $(".notice").fadeOut("fast");
      }, 2000);
   });

Je garderai le message pour les autres utilisateurs!


14

Super hack par @strager. Implémentez-le dans jQuery comme ceci:

jQuery.fn.wait = function (MiliSeconds) {
    $(this).animate({ opacity: '+=0' }, MiliSeconds);
    return this;
}

Et puis utilisez-le comme:

$('.notice').fadeIn().wait(2000).fadeOut('slow');

11

Vous pouvez faire quelque chose comme ceci:

$('.notice')
    .fadeIn()
    .animate({opacity: '+=0'}, 2000)   // Does nothing for 2000ms
    .fadeOut('fast');

Malheureusement, vous ne pouvez pas simplement faire .animate ({}, 2000) - Je pense que c'est un bogue et je vais le signaler.



5

Pour pouvoir l'utiliser comme ça, vous devez revenir this. Sans le retour, fadeOut ('slow'), n'obtiendra pas d'objet sur lequel effectuer cette opération.

C'est à dire:

  $.fn.idle = function(time)
  {
      var o = $(this);
      o.queue(function()
      {
         setTimeout(function()
         {
            o.dequeue();
         }, time);
      });
      return this;              //****
  }

Alors faites ceci:

$('.notice').fadeIn().idle(2000).fadeOut('slow');

1

Cela peut être fait avec seulement quelques lignes de 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);
});​

voir le violon ci-dessous pour un exemple de travail ...

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.