jQuery - Cliquez sur Désactiver jusqu'à ce que tous enchaînés les animations sont complètes

Question

La solution ci-dessous est destiné à glisser vers le bas de la groupDiv affichage div1 et assez d'espace pour div2 de glisser dedans. Tout est réalisé en enchaînant les animations sur le #Lien.Cliquez sur() élément.

Il semble bug, si, lors de la lien est cliqué rapidement. Est-il un moyen pour éviter cela? Par exemple, la désactivation de la fonction de Clic jusqu'à ce que le enchaîné animations sont complètes? J'ai actuellement mis en place des contrôles, mais ils ne semblent pas faire le travail 🙁

Voici le code que j'utilise:

Personnalisé animer fonctions.


//Slide up or down and fade in or out
jQuery.fn.fadeThenSlideToggle = function(speed, easing, callback) {
    if (this.is(":hidden")) {
        visibilityCheck("show", counter--);
        return this.slideDown({duration: 500, easing: "easeInOutCirc"}).animate({opacity: 1},700, "easeInOutCirc", callback);
    } else {
        visibilityCheck("hide", counter++);
        return this.fadeTo(450, 0, "easeInOutCirc").slideUp({duration: 500, easing: "easeInOutCirc", complete: callback});
    }
};

//Slide off page, or into overflow so it appears hidden.
jQuery.fn.slideLeftToggle = function(speed, easing, callback) {
    if (this.css('marginLeft') == "-595px") {
        return this.animate({marginLeft: "0"}, speed, easing, callback);
    } else {
        return this.animate({marginLeft: "-595px"}, speed, easing, callback);
    }
};

Dans les dom prêt, j'ai ceci:


$('#Link').toggle(
    function() {
        if (!$("#div2 .tab").is(':animated')) {
            $("#GroupDiv").fadeThenSlideToggle(700, "easeInOutCirc", function() {$('#div2 .tab').slideLeftToggle();});
        }
    },
    function(){
        if (!$("#groupDiv").is(':animated')) {
            $('#div2 .tab').slideLeftToggle(function() {$("#groupDiv").fadeThenSlideToggle(700, "easeInOutCirc", callback);} );
        }
    }
);

Structure HTML est: est-ce


<div id="groupDiv">
     <div id="div1">
          <div class="tab"></div>
     </div>
     <div id="div2">
          <div class="tab"></div>
     </div>
</div>
  • mise à jour de la réponse
InformationsquelleAutor Scotty | 2009-08-13