HTML'de sayfa yenilendiğinde sayfa kaydırma konumunu en üste zorla


129

divS ile yayınladığım bir web sitesi kuruyorum . X konumuna kaydırıldıktan sonra sayfayı yenilediğimde, sayfa kaydırma konumu X olarak yüklenir.

Sayfa yenilemede sayfanın en üste kaydırılmasını nasıl zorlayabilirim?

  • Ne Aklıma gibi bazı JS veya jQuery çalışmasının olduğu onLoad()için sayfanın fonksiyonu SET sayfaları üstüne gidin. Ama bunu nasıl yapabilirim bilmiyorum.

  • Sayfanın varsayılan olarak (yani en üstte) kaydırma konumu ile yüklenmesi için bir özellik veya başka bir şey olması daha iyi bir seçenek olabilir; bu, sayfa yenileme yerine bir tür sayfa yüklemesi gibidir .


Şaşırtıcı bir şekilde, buradaki çözümlerden hiçbiri benim için işe yaramadı, ancak bu işe yaramadı: stackoverflow.com/a/11486546/470749
— Ryan

Yanıtlar:



166

Basit ve sade bir JavaScript uygulaması için:

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


1
Bu doğru cevap. JQuery çözümü her durumda çalışmaz.
— Harry Stevens

@ Paul12_ - Sadece test ettim Safari 11.0.3ve benim için iyi çalışıyor, hangisini kullanıyorsun?
— ProfNandaa

Bu benim için işe yaramadı. Çalışması için onbeforeload işlevinden dönmek zorunda kaldım.
— Iqbal

@Iqbal - ne yaptın return?
— ProfNandaa

1
eklemek document.querySelector('html').style.scrollBehavior = '';de gerekli olabilir. Olarak ayarlanmışsa smooth, sayfa yeniden yüklenmeden önce en üste çıkmayabilir.
— kevnk

35

Buradaki cevap safari için işe yaramıyor, belge. Zaten genellikle çok erken ateşleniyor.

Bir şeyler yapmanı beforeunloadengelleyen olayı kullanmalısınsetTimeout

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

1
Kaydırma işlevinden sonra ekle: $ ['html']. Text (''); , böylece bebek arabası sıfırlanacak
— user956584

1
@Userpassword $ ("html"). Remove () 'in daha iyi olacağını düşünmüyor musunuz?
— Ben

18

Yine, en iyi cevap şudur:

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

(jQuery olmayanlar için, JQ yöntemini arıyorsanız bakın)

DÜZENLEME: küçük bir hata, "onbeforunload" :) Chrome ve diğer tarayıcılar, yüklemeden önce son kaydırma konumunu "hatırlar", bu nedenle, değeri, sayfanızın boşaltılmasından hemen önce 0,0 olarak ayarlarsanız 0,0'ı hatırlar ve kazanır Kaydırma çubuğunun olduğu yere geri kaydırın :)


@ Paul12_ Safari document.documentElement.scrollTopçalışması gerekir . Genelde ikisini de kullanırım.
— Graham O'Mahony

9

JQuery .scrollTop()işlevini buradan kontrol edin

Bir şeye benzeyecekti

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

9

Ayrıca deneyebilirsin

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

X konumunda kaydırmak istiyorsanız, 0 değerini x olarak değiştirebilirsiniz.


7

Bunun yerine location.reload(), sadece kullanın location.href = location.href. Yaptığı gibi önceki konuma kaydırılmayacaktır location.reload().

Not: URL'de # varsa bu yeniden yüklenmez


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

Yukarıdaki komut dosyasını <head>html'nizin etiketine koyun . Tek sayfalı uygulamaların nasıl davrandığından emin değilim! Ama normal sayfalarda kesinlikle cazibe gibi çalışıyor.


4

Cevap burada (içeri kaydırarak $(document).readySayfada bir video varsa buradaki ) işe yaramaz. Bu durumda, bu olay tetiklendikten sonra sayfa kaydırılır ve bizim çalışmamızı geçersiz kılar.

En iyi cevap şu olmalıdır:

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

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

google chrome sayfanın yüklenmesi bittikten sonra aşağı kaydıracağından benim için işe yaramadı. Ne kullandım

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

// Bu, sayfayı sonunda bir # ile yükler. Böylece her zaman en üstte yüklenecektir.


3

Pencereyi sıfırlamak için en üste geri dönün $(window).scrollTop(0), yükleme öncesi olayında püf noktaları var, ancak Chrome 80'de test ettim, yeniden yüklemeden sonra eski konumuna geri dönecek.

Bunu önlemek için, set history.scrollRestorationiçin "manual".

//Reset scroll top

history.scrollRestoration = "manual";

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

Bu benim için en iyi yanıt, Chrome / Linux'ta çalışıyor
— SNS - Web et Informatique

0

Süperkalifragilisticexpialidocious cevap:

bunu js dosyanızın veya komut dosyası etiketinizin en üstüne ekleyin

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

document.body.scrollTop = 0; // For Safari
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.