Comment éviter cet étrange jQuery .animate () lag?

Voir démo: jsFiddle

  • J'ai un formulaire simple qui est activée lorsque vous cliquez sur "afficher" /"annuler"
  • Tout fonctionne bien, mais si vous cliquez sur "annuler", peu de temps après la forme est révélé, il y a un bon 2-3 secondes de latence avant que l'animation commence même.
  • Cela ne se produit pas si vous attendez quelques secondes avant de cliquer sur 'annuler'.
  • Le décalage se fait dans tous les navigateurs testés (ie, ff, chrome).

1. Quelle est la cause de ce retard et comment peut-il être évité?

2. Est-il une meilleure façon de coder cette séquence d'animations, qui peuvent empêcher toute gal?

HTML:

<div id="newResFormWrap">
    <form id="newResForm" action="" method="post" name="newRes">
        <div id="newResFormCont">
            <h3>title</h3>
            <p>form!</p>
            <div class="button" id="cancelNewRes">Cancel</div>
        </div>
    </form> 
</div>
<div class="button" id="addRes">show</div>

jQuery:

$("#newResForm").css({opacity: 0});

$("#addRes").click(function () {
    toggleNewRes()
});
$("#cancelNewRes").click(function () {
    toggleNewRes()
});

//toggleNewRes
function toggleNewRes() {
    if ($("#newResFormWrap").css('display') == "none") {//if hidden 
        $("#addRes").animate({ opacity: 0 }, 'fast', function() {
            $("#newResFormWrap").toggle('fast', function (){
                $("#newResForm").animate({ opacity: 100 },2000);
            });
        });
    } else { //if visible
        $("#newResForm").animate({ opacity: 0 }, 100,function() {
            $("#newResFormWrap").toggle('fast', function (){
                $("#addRes").animate({ opacity: 100 });
            });
        });
    }
}

source d'informationauteur Roy