2010-10-18 7 views
3

J'utilise ce code pour retarder l'entrée d'un élément dans la zone visible de l'écran, mais le premier animé est totalement inutile, sauf pour démarrer une file d'attente que le délai peut ensuite retarder.meilleure façon de démarrer un délai dans jQuery?

$("#top-message").animate({top: '-500px'},400).delay(1000).animate({top: '0px'},800).delay(3000).animate({top: '-500px'},800); 

est-il une façon plus judicieuse de le faire?

+1

Vous devez "accepter" plus de réponses. Cela aide les autres à savoir que le problème a été résolu, et c'est une petite politesse envers ceux qui ont pris le temps de vous aider. – user113716

+0

@patrick dw - En fait, j'ai marqué comme répondu à toutes les questions que je pensais avoir été, à l'exclusion des questions subjectives, où attribuer une bonne réponse serait injuste. –

Répondre

3

Je ne comprends pas. S'il n'y a pas besoin de la première .animate(), pourquoi le faire? Si vous avez juste besoin d'un 400ms supplémentaire, ajoutez-le au .delay().

Exemple:http://jsfiddle.net/LFt4k/

$("#top-message").delay(1400).animate({top: '0px'},800) 
       .delay(3000).animate({top: '-500px'},800); 

Vous n'avez pas besoin d'un .animate() initial pour démarrer une file d'attente. The .delay() method utilisera la file d'attente par défaut "fx".


EDIT:

La question que vous pouvez avoir est que si #top-message n'a pas une valeur initiale pour top, il sera signalé comme auto dans certains navigateurs. Cette valeur n'est pas utile pour les animations.

Pour résoudre ce problème, soit donner #top-message une valeur initiale en CSS:

#top-message { 
    top: -500px; 
} 

... ou en javascript:

$("#top-message").css({top:-500}) 
       .delay(1400).animate({top: '0px'},800) 
       .delay(3000).animate({top: '-500px'},800); 
+0

si je l'enlève, le premier délai ne se produit pas –

+0

Je suppose qu'il ne tarde pas car aucune file d'effets n'a été démarrée. –

+0

@Mild Fuzz - Mais ça tarde. Voir l'exemple Si cela ne tarde pas, il y a un autre problème. Par exemple, si vous essayez de retarder quelque chose comme un '.css()', cela ne fonctionnera pas sans étapes supplémentaires. – user113716

1

Que diriez-vous de le faire dans un rappel?

$("#top-message").animate({top: '-500px'}, 400, function() { 
    $(this).delay(1000).animate({top: '0px'}, 800, function() { 
     $(this).delay(3000).animate({top: '-500px'}, 800); 
    }); 
}); 

Exemple: http://jsfiddle.net/Avinash/LFt4k/2/

+0

Est-ce que ce n'est pas seulement une façon plus longue de faire ce que j'ai déjà? –

Questions connexes