delay () et fadeOut () ne retardent pas attr () dans la queue

qu’est-ce qui ne va pas dans ce code? J’essaie d’obtenir cet effet: fadeOut(500) et attr('class','myClass') retardés de 600 millisecs .. puis fadeIn(500) delay(600) nouveau et fadeIn(500) . Les retards se produisent correctement, mais attr() n’est pas retardé, il se déclenche lorsque #myDiv est encore en train de disparaître! : ‘(

 $('#myDiv').fadeOut(500) .delay(600) .attr('class','myClass') .delay(600) .fadeIn(500); 

Le .delay() n’affecte que l’animation ou la file fx (à moins que vous ne spécifiiez une autre queue spécifiquement). Gardez à l’esprit que l’enchaînement et la mise en queue sont deux concepts distincts, l’enchaînement continue d’utiliser le même ensemble jQuery, mais c’est une chose totalement différente de toute queue d’événements sur les éléments de cet ensemble.

Pour que l’appel .attr() affecté, vous devez l’append en tant que rappel à la même queue à l’aide de .queue() , comme ceci:

 $('#myDiv').fadeOut(500) .delay(600) .queue(function(next) { $(this).attr('class','myClass'); next(); }) .delay(600) .fadeIn(500); 

Notez également qu’il existe des .addClass() , .removeClass() et .toggleClass() disponibles qui peuvent rendre cela un peu plus propre 🙂