Wenn Sie zu einer Seite a gehen und herumblättern, wird die Seite an der Stelle aktualisiert, an der Sie sie verlassen haben. Dies ist großartig, tritt jedoch auch auf Seiten auf, auf denen sich in der URL eine Ankerposition befindet. Ein Beispiel wäre, wenn Sie auf einen Link http://example.com/post/244#comment5
klicken und die Seite aktualisieren, nachdem Sie sich umgesehen haben, wären Sie nicht am Anker und die Seite springt herum. Gibt es eine Möglichkeit, dies mit Javascript zu verhindern? Damit egal was Sie immer zum Anker navigieren würden.
javascript
browser
ThomasReggi
quelle
quelle
Antworten:
Diese Lösung wird aufgrund von Änderungen im Browserverhalten nicht mehr empfohlen. Siehe andere Antworten.
Wenn ein Anker verwendet wird, binden wir grundsätzlich an das Windows-Bildlaufereignis. Die Idee ist, dass das erste Bildlaufereignis zur automatischen Neupositionierung durch den Browser gehören muss. In diesem Fall positionieren wir uns neu und entfernen dann das gebundene Ereignis. Dies verhindert, dass nachfolgende Seitenrollen das System stören.
quelle
Selbst wenn Sie in Chrome scrollTop auf 0 setzen, springt es nach dem ersten Scroll-Ereignis nachher.
Sie sollten die Schriftrolle daran binden:
Der Browser wird also ausgetrickst, um zu glauben, dass es am Anfang vor der Aktualisierung war.
quelle
window.onbeforeunload = function(){ window.scrollTo(0,0); }
Um die automatische Bildlaufwiederherstellung zu deaktivieren, fügen Sie dieses Tag einfach zum Kopfbereich hinzu.
Es wird vom IE nicht unterstützt. Browser-Kompatibilität.
quelle
Nach einer Reihe von Fehlern habe ich es endlich geschafft, den Trick zu machen. anzo ist hier korrekt, da bei Verwendung
beforeunload
die Seite nach oben springt, wenn ein Benutzer die Seite neu lädt oder auf einen Link klickt. Sounload
ist der klare Weg, dies zu tun.Javascript Weg (Danke ProfNandaa ):
EDIT: 16/07/2015
Das Sprungproblem ist bei Firefox auch bei
unload
Ereignissen noch vorhanden.quelle
beforeunload
Lösung, da sie verhindert, dass beim erneuten Laden und Ankerklicken an den Anfang der Seite gesprungen wird.Hier ist ein allgemeinerer Ansatz. Anstatt zu verhindern, dass der Browser einen Bildlauf durchführt (oder nach oben springt, wie es aussehen würde), stelle ich einfach die vorherige Position auf der Seite wieder her. Dh ich zeichne den aktuellen y-Offset der Seite in localStorage auf und scrolle zu dieser Position, sobald die Seite geladen wurde.
quelle
Sie können einfach ein # am Ende einfügen, damit die Seite oben geladen wird.
Funktioniert auf allen Browsern, Mobilgeräten und Desktops, weil es so einfach ist.
});
// Dies lädt die Seite mit einem # am Ende.
quelle
Das funktioniert bei mir.
quelle
Du solltest in der Lage sein zu.
Überprüfen Sie beim Laden, ob
window.location.hash
ein Wert vorhanden ist. Wenn dies der Fall ist, greifen Sie auf das Element mit einer ID zu, die dem Hashwert entspricht. Suchen Sie die Position des Elements (rekursive Aufrufe von offsetTop / offsetLeft) und übergeben Sie diese Werte an diewindow.scrollTo(x, y)
Methode.Dies sollte die Seite zum gewünschten Element scrollen.
quelle