2010-08-22 27 views
0

je suis en utilisant la fonction de bascule jquery comme ceci:Jquery - à l'aide bascule() mais le désactiver jusqu'à ce que les animations sont faites

$(".class").toggle( function() { //things to do... animations and so on }, function(){ // other things to do... } );

Maintenant, quand je l'appelle l'effet de levier en cliquant très souvent les animations de les deux fonctions n'attendent pas que l'autre finisse. Donc, je voudrais désactiver les effets de bascule jusqu'à ce que le contenu de chaque fonction soit fini. Ainsi, lorsque la première fonction est appelée par la bascule, la seconde ne doit pas être appelée par un autre clic sur l'élément .class. Et l'inverse

Une idée de comment je pourrais faire ça?

Merci à l'avance, Phil

Répondre

2

Vous pouvez ajouter un gestionnaire .click() lié avant la bascule qui fait cela, par exemple:

$(".class").click(function() { 
    if($(".selector:animated").length) 
    return false; 
}).toggle(function() { 
    //things to do... animations and so on 
}, function(){ 
    // other things to do... 
}); 

Ce que cela fait est si le contrôle de votre sélecteur et :animated a trouvé des éléments (ils sont toujours animés), il aurait return false et empêcherait le gestionnaire .toggle() de se faire même toucher. Cela fonctionne car les gestionnaires d'événements sont exécutés dans l'ordre où ils étaient liés, donc si le premier renvoie false, le second ne sera pas exécuté.

+0

Merci pour le conseil sur le pseudo-sélecteur animé. Je ne savais pas que c'était possible. J'avais l'habitude d'implémenter .queue() mais: animated semble plus adapté aux petites animations. – jpluijmers

+0

Merci pour votre réponse. J'ai implémenté votre code et en ajoutant une alerte avant le retour faux je reconnais que le if devient vrai. Mais je pense que cela ne fonctionne pas correctement. Je peux toujours appeler l'effet de bascule très souvent en cliquant rapidement sur l'objet. Vous pouvez voir un effet similaire à la démo documentation jquery de toggle() http://api.jquery.com/toggle/ Voir l'exemple avec le bouton toggle em et cliquez très rapidement très souvent. Les animations sont effectuées même si vous ne cliquez plus. J'ai toujours cet effet avec mon code et la fonction de clic que vous avez affichée ci-dessus. Une aide à ce sujet? – Phil

+0

@Phil - Dans ce cas, vous mettez en file d'attente des animations (assurez-vous également que votre sélecteur vérifie les bons éléments ... ceux que vous animez). Si vous voulez '.toggle()' pour arrêter les animations lorsque vous faites les * autres * animations, jetez un oeil à ['.stop()'] (http://api.jquery.com/stop/) par exemple vous ' d probablement vouloir '$ (this) .stop (true, true) .animate (...)' au lieu de '$ (this) .animate()', quel que soit l'élément que vous animez, juste '.stop()' Pour terminer l'animation précédente, les arguments 'true' doivent passer à la fin et effacer la file d'attente. –