Ich möchte reibungslos nach unten scrollen. Ich möchte dafür keine Funktion schreiben müssen - besonders wenn jQuery bereits eine hat.
javascript
jquery
Bryan Field
quelle
quelle
html
undbody
? Hier gibt es einige Einblicke: stackoverflow.com/questions/2123690/… , aber es ist keine vollständige Antwort.<html>
hatoverflow-x:hidden;
diese belebter wird nicht funktionieren. (Könnte nicht funktionieren füroverflow-y:hidden
, undoverflow:hidden
, aber ich habe nicht getestet.body
Anfang dieses Jahres in Chrome gearbeitet, aber jetzt muss es so seinhtml
.Nicks Antwort funktioniert großartig. Seien Sie vorsichtig, wenn Sie eine vollständige () Funktion im animate () -Aufruf angeben, da diese zweimal ausgeführt wird, da zwei Selektoren deklariert sind (HTML und Body).
So können Sie den doppelten Rückruf vermeiden.
quelle
die()
Funktion vor demlive()
Funktionsaufruf verwenden. Dies garantiert, dass Ihrlive()
Handler nur einmal angerufen wird.Nicks Antwort funktioniert hervorragend und die Standardeinstellungen sind nett, aber Sie können das Scrollen besser steuern, indem Sie alle optionalen Einstellungen vornehmen.
So sieht es in der API aus:
Sie könnten also so etwas tun:
Hier ist die API-Seite der jQuery .animate-Funktion: http://api.jquery.com/animate/
quelle
Wie Kita bereits erwähnt hat, gibt es ein Problem mit mehreren Rückrufen, die ausgelöst werden, wenn Sie sowohl auf "HTML" als auch auf "Body" animieren. Anstatt beide zu animieren und nachfolgende Rückrufe zu blockieren, bevorzuge ich die Erkennung grundlegender Funktionen und animiere nur die scrollTop-Eigenschaft eines einzelnen Objekts.
Die akzeptierte Antwort in diesem anderen Thread gibt einen Einblick in die scrollTop-Eigenschaft des Objekts, die wir animieren sollten: pageYOffset Scrolling and Animation in IE8
UPDATE - - -
Der obige Versuch zur Feature-Erkennung schlägt fehl. Es scheint, als gäbe es keine einzeilige Möglichkeit, dies zu tun, da die pageYOffset-Eigenschaft eines Browsers vom Typ Webkit immer Null zurückgibt, wenn ein Doctype vorhanden ist. Stattdessen habe ich einen Weg gefunden, ein Versprechen zu verwenden, um bei jeder Ausführung der Animation einen einzelnen Rückruf durchzuführen.
quelle
Ich habe das, was ich für eine bessere Lösung
$('html, body')
halte als den Hack.Es ist kein Einzeiler, aber das Problem, das ich hatte,
$('html, body')
ist, dass wenn Sie sich$(window).scrollTop()
während der Animation anmelden , Sie sehen, dass der Wert überall springt, manchmal um Hunderte von Pixeln (obwohl ich so etwas nicht sehe visuell geschehen). Der Wert musste vorhersehbar sein, damit ich die Animation abbrechen konnte, wenn der Benutzer während des automatischen Bildlaufs die Bildlaufleiste ergriff oder das Mausrad drehte.Hier ist eine Funktion, die das reibungslose Scrollen animiert:
Im Folgenden finden Sie eine komplexere Version, mit der die Animation bei Benutzerinteraktion abgebrochen und erneut ausgelöst wird, bis der Zielwert erreicht ist. Dies ist hilfreich, wenn Sie versuchen, das scrollTop sofort festzulegen (z. B. einfach aufrufen
$(window).scrollTop(1000)
- meiner Erfahrung nach funktioniert dies nicht 50% der Zeit.)quelle
Ich hatte Probleme, bei denen die Animation nach einer Seitenaktualisierung in den anderen Beispielen immer oben auf der Seite begann.
Ich habe dies behoben, indem ich das CSS nicht direkt animiert habe, sondern
window.scrollTo();
jeden Schritt aufgerufen habe :Dies umgeht auch das
html
vs-body
Problem, da es browserübergreifendes JavaScript verwendet.Werfen Sie einen Blick auf http://james.padolsey.com/javascript/fun-with-jquerys-animate/ für weitere Informationen darüber , was Sie mit jQuery animieren Funktion tun können.
quelle
Sie können die jQuery-Animation für Bildlaufseiten mit einer bestimmten Dauer verwenden:
Dabei ist 1024px der Bildlaufversatz und 5000 die Dauer der Animationen in Millisekunden.
quelle
$("html, body").animate({scrollTop: 1024}, 5000);
auch funktioniert.Probieren Sie das scrollTo- Plugin aus.
quelle
quelle
Wenn Sie am Ende der Seite nach unten gehen möchten (damit Sie nicht nach unten scrollen müssen), können Sie Folgendes verwenden:
quelle
Wenn Sie jedoch beim Scrollen wirklich Animationen hinzufügen möchten, können Sie mein einfaches Plugin ( AnimateScroll ) ausprobieren, das derzeit mehr als 30 Beschleunigungsstile unterstützt
quelle
Der browserübergreifende Code lautet:
Es ist ohne Animation, funktioniert aber überall
quelle