Le problème est que vous déclenchez l'étape suivante en utilisant la fonction de rappel de l'action fadeOut. Ainsi, le prochain fadeIn se produit après que le fadeOut ait été complété. Vous voulez plutôt que le fadeIn se produise après le délai. Vous pouvez utiliser la méthode queue
pour y parvenir :
.delay(timing).queue(function() {
function2();
$(this).dequeue(); // Garde la file d'attente en cours, elle s'arrête si vous ne faites pas cela
}).fadeOut("lentement", 0.3);
J'ai créé un exemple ici http://jsfiddle.net/e8W5E/ pour le voir en action
Éditer En réponse aux commentaires de roXon, vous pouvez écrire la solution de manière plus élégante comme suit. Le HTML est mis à jour pour supprimer le compteur redondant...
Ensuite, le jQuery ressemble à ceci...
$(function() {
// Ce sont les éléments que nous allons faire pivoter
var $blocks = $(".block");
// Configurez les éléments initiaux à une opacité de 0.3
$blocks.not(":eq(0)").fadeTo("rapide", 0.3);
// Ceci est notre fonction de répétition
var go = function($el, i, haut, bas, t) {
$el.eq(i).fadeTo("lentement", haut)
.delay(t)
.queue(function() {
// L'index suivant est 1 + l'index actuel
// utilisez le modulo pour revenir au début
var suivant = (i + 1) % $el.length;
go($el, suivant, haut, bas, t);
$(this).dequeue();
})
.fadeTo("lentement", bas);
};
// Commencez à faire apparaître et disparaître
go($blocks, 0, 1, 0.3, 1000);
})();
Vous pouvez ajouter autant de blocs que vous le souhaitez avec ce nom de classe et ils seront inclus dans la rotation du fadeIn et du fadeOut. Et fiddle http://jsfiddle.net/e8W5E/1/