Jak mogę uzyskać i ustawić bieżącą pozycję przewijania strony internetowej?
Mam długi formularz, który wymaga odświeżenia na podstawie działań / danych wejściowych użytkownika. W takim przypadku strona resetuje się na samą górę, co jest denerwujące dla użytkowników, ponieważ muszą przewinąć z powrotem do miejsca, w którym się znajdowali.
Gdybym mógł uchwycić bieżącą pozycję przewijania (w ukrytych danych wejściowych) przed ponownym załadowaniem strony, mógłbym następnie ustawić ją z powrotem po ponownym załadowaniu.
javascript
html
xyz
źródło
źródło
Odpowiedzi:
Szukasz
document.documentElement.scrollTop
nieruchomości.źródło
getScrollingPosition()
aby przechowywać wartości w ukrytych zmiennych. Następnie w html odświeżonej strony<body onLoad="window.scrollTo(x,y)
, której używam , gdzie x i y to te z wartości ukrytych!document.documentElement.scrollTop
zawsze zwraca 0.document.body.scrollTop
Jednak wydaje się, że działa. Z drugiej strony jeden Firefox na Ubuntu jest odwrotny - dostajesz 0body
i prawidłową kwotędocumentElement
. Masz jakiś pomysł, co daje?scrollTop
usługa nie działa we wszystkich przeglądarkach. Sprawdźwindow.pageXOffset
iwindow.pageYOffset
dla lepszych wyników.Aktualnie akceptowana odpowiedź jest nieprawidłowa -
document.documentElement.scrollTop
zawsze zwraca 0 w przeglądarce Chrome. Dzieje się tak, ponieważ WebKit używabody
do śledzenia przewijania, podczas gdy Firefox i IE używająhtml
.Aby uzyskać aktualną pozycję, chcesz:
Możesz ustawić bieżącą pozycję na 1000 pikseli w dół strony, w następujący sposób:
Lub za pomocą jQuery (animuj go, gdy jesteś na tym!):
źródło
window.pageYOffset
jest czystsza, jeśli używasz metodwindow.scrollBy()
lubwindow.scrollTo()
.Istnieją pewne niespójności w sposobie, w jaki przeglądarki wyświetlają współrzędne przewijania bieżącego okna. Wygląda na to, że Google Chrome na Macu i iOS zawsze powraca
0
podczas używaniadocument.documentElement.scrollTop
lub jQuery$(window).scrollTop()
.Jednak działa spójnie z:
źródło
Wybrałem rozwiązanie lokalnego przechowywania HTML5 ... Wszystkie moje linki wywołują funkcję, która ustawia to przed zmianą window.location:
a każda strona ma to w treści onLoad:
źródło