HTMLのページ更新時にページスクロール位置を強制的に上に移動


129

私はdivsで公開しているWebサイトを構築しています。位置Xにスクロールした後にページを更新すると、ページはスクロール位置をXとしてロードされます。

ページの更新時にページを強制的に最上部にスクロールするにはどうすればよいですか?

  • 何を私は考えることができることなど、いくつかのJSやjQueryの実行であるonLoad()とページの機能SETページが一番上までスクロールします。しかし、どうすればいいのかわかりません。

  • より良いオプションは、ページをデフォルトでスクロール位置でロードするプロパティ(または上部)がある場合です。これは、ページの更新ではなく、ページのロードのようなものです


驚いたことに、ここでの解決策はどれもうまくいき
Ryan

回答:



165

単純なプレーン JavaScript実装の場合:

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


1
これが正解です。jQueryソリューションはすべてのケースで機能するわけではありません。
Harry Stevens

@ Paul12_-私はそれをテストしただけでSafari 11.0.3大丈夫です、どちらを使用していますか?
ProfNandaa

これは私にはうまくいきませんでした。私はそれを機能させるためにonbeforeload関数から戻る必要がありました。
Iqbal

@Iqbal-あなたは何をしましたかreturn
ProfNandaa

1
追加document.querySelector('html').style.scrollBehavior = '';も必要かもしれません。に設定されている場合smooth、ページが再ロードされる前に上部に表示されない場合があります。
kevnk

35

ここでの答えはSafariでは機能しません。

beforeunloadあなたがいくつかを行うことを妨げるイベントを使用する必要がありますsetTimeout

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

1
スクロール機能の後に追加:$( 'html')。text( ''); 、そのためベビーカーはリセットされます
user956584

1
@Userpassword $( "html")。remove()のほうがいいと思いませんか?
ベン

18

繰り返しますが、最良の答えは次のとおりです。

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

(非jQueryの場合、JQメソッドを検索する場合は検索してください)

編集:「onbeforunload」の少しの間違い:) Chromeや他のブラウザは、アンロード前の最後のスクロール位置を「記憶」するため、ページのアンロードの直前に値を0,0に設定すると、0,0を覚えて勝ちますスクロールバーがあった場所にスクロールして戻りません:)


@ Paul12_ Safariはdocument.documentElement.scrollTop動作する必要があります。私は通常両方を使用します。
Graham O'Mahony

9

ここで jQuery .scrollTop()関数を確認してください

それは次のようになります

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

9

あなたも試すことができます

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

xの位置でスクロールする場合は、0の値をxに変更できます。


7

の代わりにlocation.reload()、単に使用しますlocation.href = location.href。前の位置までスクロールすることはありませんlocation.reload()

注:URLに#がある場合、これはリロードされません


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

上記のスクリプトを<head>HTMLのタグに挿入します。シングルページアプリの動作がわからない!しかし、通常のページでは確かに魅力のように動作します。


4

$(document).readyページにビデオがある場合、ここでの答え(スクロールイン)は機能しません。その場合、このイベントが発生した後にページがスクロールされ、作業が上書きされます。

最良の答えは:

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

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

Google Chromeはページの読み込みが完了した後に下にスクロールするだけなので、私にとってはうまくいきませんでした。私が使ったのは

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

//これにより、末尾に#が付いたページが読み込まれます。したがって、常に一番上にロードされます。


3

ウィンドウのスクロールを上に戻すようにリセットするに$(window).scrollTop(0)は、beforeunloadイベントでトリックを行いますが、Chrome 80でテストしたところ、リロード後に元の場所に戻ります。

これを防ぐには、をに設定history.scrollRestoration"manual"ます。

//Reset scroll top

history.scrollRestoration = "manual";

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

これは私にとって最良の応答であり、Chrome / Linuxで動作します
SNS-Web et Informatique

0

supercalifragilisticexpialidociousの答えは次のとおりです。

これをjsファイルまたはスクリプトタグの一番上に追加します

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

document.body.scrollTop = 0; // For Safari
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.