Gibt es eine Möglichkeit, das Scrollen des Browsers mit JavaScript / jQuery zu steuern?
Wenn ich meine Seite halb nach unten scrolle und dann ein erneutes Laden auslöse, soll die Seite nach oben gepackt werden, aber stattdessen wird versucht, die letzte Bildlaufposition zu finden. Also habe ich das gemacht:
$('document').ready(function() {
$(window).scrollTop(0);
});
Aber kein Glück.
EDIT :
Ihre beiden Antworten haben also funktioniert, wenn ich sie nach dem Laden der Seite anrufe. Danke. Wenn ich jedoch nur eine Aktualisierung der Seite durchführe, sieht es so aus, als würde der Browser nach dem .ready
Ereignis berechnen und zu seiner alten Bildlaufposition scrollen (ich habe auch die Funktion body onload () getestet).
Das Follow-up lautet also: Gibt es eine Möglichkeit, zu verhindern, dass der Browser zu seiner vorherigen Position scrollt, oder erneut nach oben zu scrollen, nachdem er seine Sache getan hat?
quelle
Antworten:
Wow, ich bin 9 Jahre zu spät bei dieser Frage. Bitte schön:
Fügen Sie diesen Code Ihrer Onload hinzu.
history.scrollRestoration Browser-Unterstützung:
Chrome: unterstützt (seit 46)
Firefox: unterstützt (seit 46)
IE / Edge: nicht unterstützt (noch ..)
Oper: unterstützt (seit 33)
Safari: unterstützt
Wenn Sie für IE / Edge nach dem automatischen Scrollen nach unten erneut nach oben scrollen möchten, hat dies für mich funktioniert:
quelle
Browserübergreifende, reine JavaScript-Lösung:
quelle
$(window).one("scroll",function() { /* the code from my answer here */ });
Sie haben es fast geschafft - Sie müssen das
scrollTop
einschaltenbody
, nichtwindow
:BEARBEITEN:
Vielleicht können Sie oben auf der Seite einen leeren Anker hinzufügen:
quelle
'html','body'
da die modernen Browser basierend auf dem Text scrollen, IE8 und darunter jedoch nur mit 'html', 'body'.Die folgende jquery-Lösung funktioniert für mich:
quelle
Hier ist eine reine animierte JavaScript-Scroll-Version für No-jQuery'er: D.
Und dann:
quelle
requestAnimationStep
anstattsetTimeout
. Auch beantwortet es nicht die Frage von OP.AKTUALISIEREN
Mit einem Bildlaufeffekt zum Seitenanfang zu gelangen, ist in Javascript jetzt etwas einfacher:
https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
VORSICHT
Wir haben dies in unseren neueren Projekten verwendet, aber ich habe gerade das Mozilla-Dokument überprüft, während ich meine Antwort aktualisiert habe, und ich glaube, es wurde aktualisiert. Im Moment ist das Verfahren
window.scroll(x-coord, y-coord)
und nicht erwähnt oder Beispiele zeigen , dass die Verwendungobject
Parameter in dem Sie die festlegenbehavior
zusmooth
. Ich habe gerade den Code ausprobiert und er funktioniert immer noch in Chrome und Firefox und der Objektparameter befindet sich immer noch in der Spezifikation .Verwenden Sie dies also mit Vorsicht, oder Sie können diese Polyfüllung verwenden . Abgesehen von nach oben scrollen, diese polyfill behandelt auch andere Methoden:
window.scrollBy
,element.scrollIntoView
usw.ALTE ANTWORT
Dies ist unsere Vanille-
javascript
Implementierung. Es hat einen einfachen Lockerungseffekt, damit der Benutzer nach dem Klicken auf die Schaltfläche Nach oben nicht schockiert wird .Es ist sehr klein und wird noch kleiner, wenn es verkleinert wird. Entwickler, die nach einer Alternative zur jquery-Methode suchen, aber dieselben Ergebnisse erzielen möchten, können dies versuchen.
JS
HTML
Prost!
quelle
Das funktioniert bei mir:
Verwendet einen Kurzschluss
setTimeout
inonload
, um dem Browser die Möglichkeit zu geben, den Bildlauf durchzuführen.quelle
Sie können mit jQuery verwenden
quelle
Verwenden Sie die folgende Funktion
Hier ist xpos erforderlich. Die Koordinate, zu der entlang der x-Achse (horizontal) in Pixel gescrollt werden soll
ypos ist ebenfalls erforderlich. Die Koordinate, zu der entlang der y-Achse (vertikal) in Pixel gescrollt werden soll
quelle
Benutze das
quelle
Der folgende Code funktioniert in Firefox, Chrome und Safari , aber ich konnte ihn in Internet Explorer nicht testen. Kann jemand es testen und dann meine Antwort bearbeiten oder kommentieren?
quelle
Meine reine (animierte) Javascript-Lösung:
Erläuterung:
window.scrollY
ist eine vom Browser verwaltete Variable für die Anzahl der Pixel von oben, um die das Fenster gescrollt wurde.window.scrollTo(x,y)
ist eine Funktion, die das Fenster um eine bestimmte Anzahl von Pixeln auf der x-Achse und auf der y-Achse scrollt.Somit
window.scrollTo(0,window.scrollY-20)
bewegt sich die Seite 20 Pixel nach oben.Das
setTimeout
ruft die Funktion in 10 Millisekunden erneut auf, damit wir sie dann um weitere 20 Pixel (animiert) verschieben können, und dieif
Anweisung prüft, ob noch gescrollt werden muss.quelle
Warum verwenden Sie nicht einfach ein Referenzelement ganz am Anfang Ihrer HTML-Datei, wie z
und dann, wenn die Seite geladen wird, einfach tun
Wenn der Browser nach dem Auslösen dieser Funktion einen Bildlauf durchführt, tun Sie dies einfach
quelle
Browserübergreifend nach oben scrollen:
Browserübergreifender Bildlauf zu einem Element mit id = div_id:
quelle
Um Ihre bearbeitete Frage zu beantworten, können Sie den
onscroll
Handler wie folgt registrieren :Dadurch wird der erste Bildlaufversuch (der wahrscheinlich automatisch vom Browser ausgeführt wird) effektiv abgebrochen.
quelle
Wenn Sie sich im Quircks-Modus befinden (danke @Niet the Dark Absol):
Wenn Sie sich im strengen Modus befinden:
Hier ist jQuery nicht erforderlich.
quelle
Das funktioniert:
quelle
In meinem Fall hat der Körper nicht funktioniert:
Aber HTML hat funktioniert:
quelle
'html','body'
als die modernen Browser FF, Chrome wird basierend auf dem Körper scrollen, aber IE8 und darunter wird nur mit'html','body'
Die Kombination dieser beiden hat mir geholfen. Keine der anderen Antworten half mir, da ich ein Sidenav hatte, das nicht scrollte.
quelle
quelle
ohne Animation nur
scroll(0, 0)
(Vanille JS)quelle
Wenn jemand mit sidenav eckiges und materielles Design verwendet. Dadurch gelangen Sie zum Anfang der Seite:
quelle
Seeint der Hash sollte den Job machen. Wenn Sie einen Header haben, können Sie verwenden
Andernfalls funktioniert das # alleine
Und wenn es in die URL geschrieben wird, bleibt es, wenn Sie es aktualisieren.
Tatsächlich benötigen Sie kein JavaScript-Ereignis, wenn Sie dies bei einem Onclick-Ereignis tun möchten, sollten Sie einfach einen Link um Ihr Element setzen und ihm # als href geben.
quelle
Fügen Sie zuerst ein leeres Ankertag an der Stelle hinzu, an die Sie gehen möchten
Fügen Sie nun eine Funktion im Header-Bereich hinzu
Fügen Sie dem Body-Tag schließlich ein Onload-Ereignis hinzu
quelle
Eine generische Version, die für jeden X- und Y-Wert funktioniert und mit der window.scrollTo-API identisch ist, nur mit dem Zusatz scrollDuration.
* Eine generische Version, die mit der window.scrollTo-Browser-API übereinstimmt **
quelle
Ich erinnere mich, dass ich das woanders gepostet habe (ich konnte nicht finden, wo), aber das funktioniert wirklich gut:
Es ist seltsam, aber die Funktionsweise basiert auf der Funktionsweise der Stapelwarteschlange von JavaScript. Die vollständige Erklärung finden Sie hier im Abschnitt Zero Delays.
Die Grundidee ist, dass die Zeit für
setTimeout
nicht die festgelegte Wartezeit angibt, sondern die minimale Wartezeit. Wenn Sie also anweisen, 0 ms zu warten, führt der Browser alle anderen Prozesse in der Warteschlange aus (z. B. das Fenster zu dem Ort scrollen, an dem Sie zuletzt waren) und führt dann den Rückruf aus.quelle
quelle