Da ich eine scrollTop
Animation hinzugefügt habe, werden einige Teile meines Rückrufs zweimal aufgerufen:
$('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);
});
});
});
Es scheint nur das zu wiederholen .show()
, zumindest habe ich nicht den Eindruck, dass das load()
oder das .fadeIn()
auch ein zweites Mal aufgerufen wird. Das .show()
wird wiederholt, sobald es zum ersten Mal beendet ist. Das Einstellen der scrollTop-Animationsgeschwindigkeit auf 0
hat übrigens nicht geholfen!
Ich nehme an, es hat etwas mit der Animationswarteschlange zu tun, aber ich kann nicht herausfinden, wie man eine Problemumgehung findet und insbesondere, warum dies geschieht.
html, body
. Zeit, mein Gehirn wieder einzuschalten. Dankehtml
ist für den Internet Explorer erforderlich, und der Rückruf wird für die meisten anderen Browser zweimal ausgelöst. Ich versuche, eine Lösung für das gleiche Problem zu finden.var ranOne = false; $('body,html').animate({ scrollTop: scrollTo }, scrollTime, 'swing', function () { if (ranOne) { ...action... ranOne = false; } else { ranOne = true; } });
Es fühlt sich hackig an, aber "body, html" verwenden zu müssen, ist in erster Linie etwas hackig. (Ech Entschuldigung für das Fehlen von Zeilenumbrüchen, erraten Kommentare zeigen sie nicht)Verwenden Sie zurückgestellte Objekte, um einen einzelnen Rückruf für die Fertigstellung von Animationen mit mehreren Elementen zu erhalten.
In der jQuery-API finden Sie eine detaillierte Beschreibung der Promise- und Deferred-Objekte .
quelle