retard () et fadeOut () ne retardent pas attr () dans la file d'attente
Question
ce qui ne va pas dans ce code? Je suis en train d'obtenir cet effet: fadeOut(500)
et attr('class','myClass')
retardé de 600 millisecs .. delay(600)
puis à nouveau, et fadeIn(500)
. Les retards se produisent correctement mais le attr()
n'est pas retardé, il se déclenche quand #myDiv
est encore fane! : '(
$('#myDiv').fadeOut(500)
.delay(600)
.attr('class','myClass')
.delay(600)
.fadeIn(500);
La solution
Le .delay()
affecte uniquement la file d'attente d'animation ou fx
(sauf si vous spécifiez une autre file d'attente spécifique). Gardez à l'esprit que enchaînant et faire la queue sont 2 concepts distincts, l'utilisation continue Enchaînement du même ensemble jquery, mais c'est une chose totalement différente que les files d'attente d'événements sur les éléments de cet ensemble.
Pour que le .attr()
appel affecté, vous devez l'ajouter comme un rappel à cette même file d'attente en utilisant .queue()
, comme ceci:
$('#myDiv').fadeOut(500)
.delay(600)
.queue(function(next) { $(this).attr('class','myClass'); next(); })
.delay(600)
.fadeIn(500);
Notez également il y a .addClass()
, .removeClass() et href="http://api.jquery.com/toggleClass/" rel="noreferrer"> .toggleClass()
méthodes disponibles qui peuvent faire un peu plus propre:)