Czy istnieje sposób kontrolowania przewijania przeglądarki za pomocą JavaScript / jQuery?
Kiedy przewijam stronę do połowy, a następnie uruchamiam ponowne ładowanie, chcę, aby strona wróciła do góry, ale zamiast tego próbuje znaleźć ostatnią pozycję przewijania. Więc zrobiłem to:
$('document').ready(function() {
$(window).scrollTop(0);
});
Ale bez szczęścia.
EDYCJA :
Więc obie odpowiedzi zadziałały, kiedy dzwonię do nich po załadowaniu strony - Dzięki. Jeśli jednak po prostu odświeżę stronę, wygląda na to, że przeglądarka oblicza i przewija do swojej starej pozycji przewijania PO .ready
zdarzeniu (przetestowałem również funkcję body onload ()).
Zatem następująca kwestia brzmi: czy istnieje sposób, aby ZAPOBIEGŁA przewijaniu przeglądarki do jej poprzedniej pozycji, czy też aby ponownie przewinąć do góry, PO tym, jak to zrobi?
źródło
Odpowiedzi:
Wow, spóźniłem się 9 lat na to pytanie. Proszę bardzo:
Dodaj ten kod do swojego pliku onload.
history.scrollRestoration Browser - obsługa:
Chrome: obsługiwany (od 46)
Firefox: obsługiwany (od 46)
IE / Edge: nieobsługiwane (jeszcze ...)
Opera: obsługiwana (od 33)
Safari: obsługiwane
W przypadku IE / Edge, jeśli chcesz ponownie przewinąć do góry PO automatycznym przewijaniu w dół, to zadziałało dla mnie:
źródło
Rozwiązanie oparte na czystym JavaScript dla różnych przeglądarek:
źródło
$(window).one("scroll",function() { /* the code from my answer here */ });
Jesteś prawie dostał go - trzeba ustawić
scrollTop
nabody
niewindow
:EDYTOWAĆ:
Może mógłbyś dodać pustą kotwicę na górze strony:
źródło
'html','body'
ponieważ nowoczesne przeglądarki będą przewijać na podstawie treści, ale IE8 i poniżej będą przewijać się tylko za pomocą „html”, „body”U mnie działa następujące rozwiązanie jQuery:
źródło
Oto czysta animowana wersja przewijania JavaScript dla no-jQuery'ers: D
I wtedy:
źródło
requestAnimationStep
zamiastsetTimeout
. Nie odpowiada również na pytanie OP.AKTUALIZACJA
Przechodzenie na górę strony z efektem przewijania jest teraz nieco łatwiejsze w javascript dzięki:
https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
UWAGA
Używaliśmy tego w naszych nowszych projektach, ale właśnie sprawdziłem dokument Mozilli podczas aktualizacji mojej odpowiedzi i uważam, że został zaktualizowany. W tej chwili metoda jest
window.scroll(x-coord, y-coord)
i nie wspomina ani nie pokazuje przykładów, które używająobject
parametru, w którym można ustawićbehavior
tosmooth
. Właśnie wypróbowałem kod i nadal działa w Chrome i Firefox, a parametr obiektu jest nadal w specyfikacji .Więc używaj tego ostrożnie lub możesz użyć tego Polyfill . Oprócz przewijania do góry, to polyfill obsługuje także inne metody:
window.scrollBy
,element.scrollIntoView
, itd.STARA ODPOWIEDŹ
To jest nasza
javascript
implementacja waniliowa . Ma prosty efekt wygładzający, dzięki czemu użytkownik nie dozna szoku po kliknięciu przycisku Do góry .Jest bardzo mały, a po zminimalizowaniu staje się jeszcze mniejszy. Programiści szukający alternatywy dla metody jquery, ale chcący uzyskać te same wyniki, mogą spróbować tego.
JS
HTML
Twoje zdrowie!
źródło
To działa dla mnie:
Używa skrótu
setTimeout
wewnątrz elementu,onload
aby umożliwić przeglądarce przewinięcie.źródło
Możesz używać z jQuery
źródło
Użyj następującej funkcji
Tutaj wymagane są xpos. Współrzędna do przewinięcia wzdłuż osi X (poziomej), w pikselach
ypos jest również wymagane. Współrzędna do przewinięcia wzdłuż osi Y (w pionie) w pikselach
źródło
Użyj tego
źródło
Poniższy kod działa w przeglądarkach Firefox, Chrome i Safari , ale nie udało mi się to przetestować w przeglądarce Internet Explorer. Czy ktoś może to przetestować, a następnie edytować moją odpowiedź lub skomentować ją?
źródło
Moje czyste (animowane) rozwiązanie JavaScript:
Wyjaśnienie:
window.scrollY
to zmienna utrzymywana przez przeglądarkę, określająca ilość pikseli od góry, o jaką przewijano okno.window.scrollTo(x,y)
to funkcja, która przewija okno o określoną liczbę pikseli na osi x i osi y.W ten sposób
window.scrollTo(0,window.scrollY-20)
przesuwa stronę o 20 pikseli w górę.setTimeout
Wywołuje funkcję ponownie w 10 milisekund, dzięki czemu możemy następnie przenieść go kolejne 20 pikseli (animowane) orazif
kontrole instrukcji jeśli wciąż musimy zwoju.źródło
Dlaczego nie użyjesz po prostu elementu referencyjnego na samym początku pliku HTML, np.
a kiedy strona się załaduje, po prostu zrób
Jeśli przeglądarka przewinie się po uruchomieniu tej funkcji, po prostu to zrobisz
źródło
Przewiń do góry w różnych przeglądarkach:
Przewiń w różnych przeglądarkach do elementu z id = div_id:
źródło
Aby odpowiedzieć na edytowane pytanie, możesz zarejestrować program
onscroll
obsługi w następujący sposób:To sprawi, że pierwsza próba przewijania (prawdopodobnie wykonana automatycznie przez przeglądarkę) zostanie skutecznie anulowana.
źródło
Jeśli jesteś w trybie dziwactw (dzięki @Niet the Dark Absol):
Jeśli jesteś w trybie ścisłym:
Nie ma tu potrzeby jQuery.
źródło
To działa:
źródło
W moim przypadku ciało nie działało:
Ale HTML działał:
źródło
'html','body'
jako nowoczesne przeglądarki FF, Chrome będzie przewijać na podstawie treści, ale IE8 i poniżej będą przewijały się tylko z'html','body'
Pomogło mi połączenie tych dwóch. Żadna z pozostałych odpowiedzi nie pomogła mi, ponieważ miałem sidenav, który nie przewijał.
źródło
źródło
bez animacji, tylko
scroll(0, 0)
(vanilla JS)źródło
Jeśli ktoś korzysta z kątowego i materiałowego projektu z sidenavem. Spowoduje to przeniesienie na górę strony:
źródło
Seeint hash powinien załatwić sprawę. Jeśli masz nagłówek, możesz użyć
w przeciwnym razie sam # zadziała
A gdy zostanie zapisany w adresie URL, pozostanie, jeśli odświeżysz.
W rzeczywistości nie potrzebujesz JavaScript do tego, aby zrobić to na zdarzeniu onclick, powinieneś po prostu umieścić link wokół elementu i nadać mu # jako href.
źródło
Najpierw dodaj pusty tag kotwicy do miejsca, w którym chcesz się udać
Teraz dodaj funkcję w sekcji nagłówka
na koniec dodaj zdarzenie onload do tagu body
źródło
Ogólna wersja, która działa dla dowolnej wartości X i Y i jest taka sama jak interfejs API window.scrollTo, tylko z dodatkiem scrollDuration.
* Ogólna wersja pasująca do interfejsu API przeglądarki window.scrollTo **
źródło
Pamiętam, że widziałem ten opublikowany gdzie indziej (nie mogłem znaleźć miejsca), ale działa to naprawdę dobrze:
To dziwne, ale sposób, w jaki to działa, zależy od sposobu, w jaki działa kolejka stosu JavaScript. Pełne wyjaśnienie można znaleźć tutaj w sekcji Zero opóźnień.
Podstawową ideą jest to, że czas
setTimeout
nie określa w rzeczywistości ustawionej ilości czasu, który będzie czekać, ale minimalny czas, który będzie czekać. Więc kiedy każesz mu czekać 0 ms, przeglądarka uruchamia wszystkie inne procesy w kolejce (jak przewijanie okna do miejsca, w którym byłeś ostatnio), a następnie wykonuje wywołanie zwrotne.źródło
źródło