Depuis que j'ai ajouté quelques scrollTop
-animation, certaines parties de mon callback sont appelées 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);
});
});
});
Il semble seulement répéter le .show()
, du moins je n'ai pas l'impression que le load()
ou le .fadeIn()
soit appelé une deuxième fois aussi. Le .show()
se répète dès qu'il est terminé pour la première fois. Régler la vitesse d'animation scrollTop sur 0
n'a pas aidé d'ailleurs!
Je suppose que cela a quelque chose à voir avec la file d'attente d'animation, mais je ne peux pas comprendre comment trouver une solution de contournement et surtout pourquoi cela se produit.
html, body
. Il est temps de rallumer mon cerveau. Mercihtml
est requis pour IE, et le rappel se déclenchera deux fois pour la plupart des autres navigateurs. J'essaye de trouver une solution au même problème.var ranOne = false; $('body,html').animate({ scrollTop: scrollTo }, scrollTime, 'swing', function () { if (ranOne) { ...action... ranOne = false; } else { ranOne = true; } });
cela semble piraté, mais devoir utiliser "body, html" est une sorte de piratage en premier lieu, donc. (ech désolé pour le manque de sauts de ligne, les commentaires guess ne les montrent pas)Pour obtenir un seul rappel pour l'achèvement de plusieurs animations d'éléments, utilisez des objets différés.
Voir l'API jQuery pour une description détaillée de la promesse et des objets différés .
la source