48 votes

retarder les effets JQuery

Je veux faire disparaître en fondu un élément et tous ses éléments enfants après un délai de quelques secondes. Mais je n'ai pas trouvé de moyen de spécifier qu'un effet doit commencer après un délai donné.

1 votes

Pouvez-vous donner un exemple de cas où les enfants d'un élément ne s'effacent pas avec cet élément ?

1 votes

Désolé, mon erreur, je vais mettre à jour le post.

77voto

swilliams Points 19415
setTimeout(function() { $('#foo').fadeOut(); }, 5000);

La valeur de 5000 est de cinq secondes en millisecondes.

3 votes

Notez qu'il s'agit d'utiliser la fonction setTimeout intégrée de Javascript, rien de spécifique à jQuery.

0 votes

Cela ne répond que partiellement à sa question, je pense.

43voto

Simon_Weaver Points 31141

J'utilise ce plugin de pause que je viens d'écrire

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

Appelez ça comme ça :

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

Note : vous n'avez pas besoin d'un callback.


Edit : Vous devriez maintenant utiliser le jQuery 1.4, avec delay() intégré méthode. Je n'ai pas vérifié mais je suppose qu'elle est plus "intelligente" que mon plugin.

0 votes

Cela m'aide beaucoup ! Merci :-)

0 votes

Faites attention si jQuery ajoute un jour une fonction pause() parce qu'elle sera probablement meilleure que la mienne ! mais il est bon de résumer ce que vous faites comme ceci

0 votes

Quelqu'un peut-il m'expliquer pourquoi je n'ai pas besoin d'un callback ? je ne suis pas sûr de savoir pourquoi cela ne retourne pas immédiatement.

19voto

Drew Points 2534

Auparavant, vous deviez faire quelque chose comme ceci

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

La première animation ne fait rien puisque vous avez déjà l'opacité 1 sur l'élément, mais elle se mettrait en pause pendant le temps imparti.

Dans la version 1.4 de jQuery, cette fonction a été intégrée au cadre de travail, ce qui évite d'avoir à utiliser la méthode décrite ci-dessus.

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

La fonctionnalité est la même que celle de l'original jQuery.delay() plugin http://www.evanbot.com/article/jquery-delay-plugin/4

11voto

Le meilleur moyen est d'utiliser la méthode de retardement de jQuery :

$('#my_id').delay(2000).fadeOut(2000) ;

1voto

Jonathan Sampson Points 121800

Vous pouvez éviter d'utiliser setTimeout en utilisant la méthode fadeTo(), et en fixant un délai de 5 secondes.

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

0 votes

Faire ce genre de bloc est très gourmand en ressources informatiques par rapport à setTimeout. Je ne vois pas l'avantage. - Pourquoi est-il nécessaire d'éviter le timer natif ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X