Wymuś przewijanie strony do góry przy odświeżaniu strony w HTML


134

Buduję stronę internetową, którą publikuję z divs. Kiedy odświeżam stronę po przewinięciu do pozycji X, strona jest ładowana z pozycją przewijania X.

Jak wymusić przewijanie strony do góry podczas odświeżania strony?

  • To, co przychodzi mi do głowy, to niektóre JS lub jQuery uruchomione jako onLoad()funkcja strony, aby ustawić przewijanie stron do góry. Ale nie wiem, jak mogłem to zrobić.

  • Lepszą opcją byłoby, gdyby istniała jakaś właściwość lub coś, co powoduje, że strona jest ładowana z domyślną pozycją przewijania (tj. Na górze), co będzie przypominało ładowanie strony , zamiast jej odświeżania .


O dziwo, żadne z rozwiązań tutaj nie zadziałało, ale to zadziałało: stackoverflow.com/a/11486546/470749
— Ryan

Odpowiedzi:



174

Aby uzyskać prostą implementację zwykłego JavaScript:

window.onbeforeunload = function () {
  window.scrollTo(0, 0);
}


1
To jest poprawna odpowiedź. Rozwiązanie jQuery nie działa we wszystkich przypadkach.
— Harry Stevens

@ Paul12_ - Właśnie to przetestowałem Safari 11.0.3i dla mnie działa dobrze, którego używasz?
— ProfNandaa

To nie zadziałało dla mnie. Musiałem wrócić z funkcji onbeforeload, aby działała.
— Iqbal

@Iqbal - co zrobiłeś return?
— ProfNandaa

1
dodanie document.querySelector('html').style.scrollBehavior = '';może być konieczne. Jeśli był ustawiony na smooth, może nie dotrzeć na początek strony przed ponownym załadowaniem strony.
— kevnk

35

Odpowiedź tutaj nie działa dla safari, dokument. Często jest już odpalany zbyt wcześnie.

Powinien użyć beforeunloadzdarzenia, które uniemożliwia ci jakąś formęsetTimeout

$(window).on('beforeunload', function(){
  $(window).scrollTop(0);
});

1
Funkcja dodawania po przewijaniu: $ ('html'). Text (''); , więc wózek zostanie zresetowany
— user956584

1
@Userpassword Nie sądzisz, że $ ("html"). Remove () byłoby lepsze?
— Ben

20

Ponownie, najlepszą odpowiedzią jest:

window.onbeforeunload = function () {
    window.scrollTo(0,0);
};

(to jest dla innych niż jQuery, sprawdź, jeśli szukasz metody JQ)

EDYCJA: mały błąd to "onbeforunload" :) Chrome i inne przeglądarki "zapamiętują" ostatnią pozycję przewijania przed wyładowaniem, więc jeśli ustawisz wartość na 0,0 tuż przed wyładowaniem strony, zapamiętają 0,0 i wygrają nie przewijaj z powrotem do miejsca, w którym był pasek przewijania :)


@ Paul12_ Safari wymaga document.documentElement.scrollTopdo działania. Zwykle używam obu.
— Graham John

9

Sprawdź tutaj.scrollTop() funkcję jQuery

Wyglądałoby to jakoś

$(document).load().scrollTop(0);

9

Możesz też spróbować

$(document).ready(function(){
    $(window).scrollTop(0);
});

Jeśli chcesz przewijać w pozycji x, możesz zmienić wartość z 0 na x.


7

Zamiast tego location.reload()po prostu użyj location.href = location.href. Nie przejdzie do poprzedniej pozycji, tak jak to location.reload()robi.

Uwaga: nie załaduje się ponownie, jeśli w adresie URL będzie #


6

Aby zresetować okno przewiń z powrotem do góry, $(window).scrollTop(0)w zdarzeniu beforeunload robi się sztuczki, jednak testowałem w Chrome 80, po ponownym załadowaniu wróci do starej lokalizacji.

Aby temu zapobiec, ustaw opcję history.scrollRestorationna "manual".

//Reset scroll top

history.scrollRestoration = "manual";

$(window).on('beforeunload', function(){
      $(window).scrollTop(0);
});

To dla mnie najlepsza odpowiedź, działa na Chrome / Linux
— SNS - Web et Informatique

4
<script> location.hash = (location.hash) ? location.hash : " "; </script>

Powyższy skrypt <head>umieść w tagu swojego html. Nie jestem pewien, jak zachowują się aplikacje na jednej stronie! Ale na pewno działa jak urok na zwykłych stronach.


4

Odpowiedź tutaj (przewijanie $(document).ready) nie działa, jeśli na stronie jest wideo. W takim przypadku strona jest przewijana po uruchomieniu tego zdarzenia, nadpisując naszą pracę.

Najlepsza odpowiedź powinna brzmieć:

$(window).on('beforeunload', function(){
    $(window).scrollTop(0);
});

3
$(document).ready(function(){
    $(window).scrollTop(0);
});

nie działało dla mnie, ponieważ Google Chrome po prostu przewijał się w dół po zakończeniu ładowania strony. To, czego użyłem, było

$(document).ready(function() {
    var url = window.location.href;
    console.log(url);
    if( url.indexOf('#') < 0 ) {
        window.location.replace(url + "#");
    } else {
        window.location.replace(url);
    }
});

// To ładuje stronę z # na końcu. Więc zawsze ładuje się na górze.


0

Superkalifragilistyczno-ekspercka odpowiedź brzmi:

dodaj to na początku pliku js lub tagu skryptu

document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera

document.body.scrollTop = 0; // For Safari

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.