Rappel de .animate() est appelée deux fois jquery
Depuis, j'ai ajouté quelques scrollTop
-animation, certaines parties de mon callback appelée deux fois:
$('html, body').animate({scrollTop: '0px'}, 300,function() {
$('#content').load(window.location.href, postdata, function() {
$('#step2').addClass('stepactive').hide().fadeIn(700, function() {
$('#content').show('slide',800);
});
});
});
Elle ne semble répéter le .show()
, au moins je n'ai pas l'impression que le load()
ou la .fadeIn()
appelée une deuxième fois trop. Le .show()
répété dès qu'il a terminé pour la première fois. Réglage de la scrollTop animation-vitesse de 0
n'aide pas, par la manière dont!
Je suppose qu'il a quelque chose à voir avec l'animation de file d'attente, mais je ne peux pas comprendre comment trouver une solution de contournement et surtout pourquoi ce qui se passe.
Vous devez vous connecter pour publier un commentaire.
animer
appelle son rappel une fois pour chaque élément dans le jeu que vous appelezanimate
sur:Puisque vous êtes à l'animation de deux éléments (le
html
élément, et lebody
élément), vous obtenez deux rappels. (Pour ceux se demandant pourquoi l'OP est l'animation de deux éléments, c'est parce que l'animation fonctionne surbody
sur certains navigateurs, mais surhtml
sur d'autres navigateurs.)Pour obtenir un unique de rappel lorsque l'animation est terminée, le
animate
docs point vous à l'aide de lapromesse
méthode pour obtenir une promesse pour l'animation de la file d'attente, puis à l'aidethen
à la file d'attente de rappel:(Note: Kevin B a souligné dans sa réponse lorsque la question est posée. Je n'ai pas jusqu'à ce que quatre années plus tard, quand j'ai remarqué qu'il manquait, ajouté, et...puis vu Kevin réponse. Merci de donner sa réponse à l'amour qu'il mérite. J'ai pensé que c'est la réponse, je doit laisser il en.)
Voici un exemple d'affichage de l'élément individuel de rappels, et la réalisation globale de rappel:
JS:
HTML:
html, body
. Le temps de mettre mon cerveau sur le retour. Mercihtml
est nécessaire pour IE, et le rappel de feu à deux reprises pour la plupart des autres navigateurs. Je suis en train de travailler à une solution du même problème.var ranOne = false; $('body,html').animate({ scrollTop: scrollTo }, scrollTime, 'swing', function () { if (ranOne) { ...action... ranOne = false; } else { ranOne = true; } });
Il se sent hacky, mais d'avoir à utiliser des "corps,html" est une sorte de hacky en premier lieu, afin d'. (ech désolé pour le manque de sauts de ligne, suppose que les commentaires ne montrent pas)Pour obtenir un rappel unique pour la réalisation de multiples animations d'éléments, l'utilisation différée des objets.
Voir le jQuery API pour une description détaillée de la Promesse et Différés Objets.
html, body
et de ne pas mentionnerpromise
, et a ajouté que. Puis j'ai vu votre réponse. Retour à éditer un lien vers le vôtre que le mien.