Nach dem Blättern der Seite zu einem bestimmten Element muss ich eine Klasse zu diesem Element hinzufügen. Problem ist, das falsche Element erhält die Klasse, weil die komplette Funktion vor Beendigung der Scroll-Animation ausgelöst wird. Ich weiß, denn wenn ich die komplette Funktion in eine setTimeout()
wrap es funktioniert.jQuery animate() 's komplette Funktion wird vor der Fertigstellung ausgelöst
Warum sollte die komplette Funktion vor der Fertigstellung ausgelöst werden? Ist es ein bekanntes Problem? Was ist der zuverlässigste Weg, um dieses Problem zu lösen?
Mein Code:
$('html, body').animate({
scrollTop: current_element_position + 'px'
}, 'fast', function(){
current_element.addClass('current_element');
});
Sie schrieb schnell Argument für belebtes Funktion. Es gibt hier drei Optionen: schnell, mittel und langsam. So hat jeder Zeit, um den Effekt zu vervollständigen. JavaScript ist jedoch asynchron, sodass es nicht darauf wartet, dass eine Aktion abgeschlossen wird, um die nächste zu starten. Wenn eine Aktion länger als die Ausführungszeit dauert, wird der nächste Code ausgeführt. –
Wenn das, was Sie sagen, richtig ist, warum haben sie die vollständige Funktion "complete" auf http://api.jquery.com/animate/ aufgerufen? Wenn es Fälle gibt, in denen die Funktion vor der eigentlichen Fertigstellung ausgelöst wird, scheint der Begriff für mich ziemlich irreführend zu sein. – drake035
Sie haben meinen Freund korrekt. Aber Sie müssen darüber nachdenken, und wie Sie sagten, wäre eine Zeitüberschreitung hilfreich für Sie. –