2009-10-27 3 views
1

Le chaînage est excellent dans jQuery, mais il enchaîne le déclenchement de chaque événement et n'attend pas que l'événement précédent se termine. Ceci est visible principalement lors de l'animation. En tant que tel, la solution de contournement que j'ai vu est d'utiliser des fonctions de rappel. Le seul inconvénient est si, disons, vous avez 4 choses que vous voulez animer successivement.Façon moins verbeuse de chaîner des événements jquery qui doivent attendre des animations?

Certes, c'est probablement quelque chose que vous ne voulez pas faire très souvent, mais quand vous le faites, le balisage semble être un peu verbeux. Exemple (pseudocode):

element.animate(fast, callBackFunction1(element1,element2,element3); 

function callBackFunction1(element1,element2,element3){ 
    element1.animate(fast, callBackFunction2(element2,element3)); 
}; 

function callBackFunction2(element2,element3){ 
    element2.animate(fast, callBackFunction3(element3)); 
}; 

function callBackFunction3(element3){ 
    element3.animate(fast); 
}; 

Dans cette situation, est-ce la meilleure/la plus succincte des choses?

Répondre

5

Essayez ce qui suit .. :)

element.animate(fast, function() { 
    element1.animate(fast, function() { 
     element2.animate(fast, function() { 
      element3.animate(fast); 
     }); 
    }); 
}); 
+0

J'aime la façon que les groupes logiquement la chaîne ensemble. Merci! –

1
var animElements = [ 
    element, 
    element1, 
    element2, 
    element3, 
]; 

function animateChain(elements) { 
    if(elements.length > 0) { 
     var element = elements.pop(); 
     element.animate("fast", function(){ animateChain(elements); }); 
    } 
} 

animateChain(animElements); 
+0

Etre récursif, est-ce un gros non-non? J'aime la logique de la récursivité, mais je sais que c'est parfois considéré comme une mauvaise chose. –

+0

suivre le flux attentivement, ce n'est vraiment pas la récursivité. Le callback est ce qui rappelle 'animateChain' et non' animateChain' lui-même. C'est plus une approche itérative. – joshperry

+0

ah! C'est une façon intelligente de l'écrire. Merci, Josh! –

Questions connexes