4

そのため、最近ではほとんどのブラウザーがページの更新時にウィンドウ スクロールの位置を自動的に変更しますが、これは通常は素晴らしいことですが、ページをリロードして、ユーザーが離れた場所とは異なるページの部分に焦点を当てる必要がある状況があります。フォーカスを取得する新しい要素は非表示として開始されるため、ハッシュは機能しないことに注意してください。とりわけ div を表示できるように、JS で処理する必要があります。

リロード後に呼び出されます...

$(document).ready(function(){
    $('#mydiv').show();
    var top = $('#myelement').offset().top;
    window.scrollTo(0, top);
});

それにもかかわらず、ページはユーザーがページを離れた場所に焦点を当てています。多くのデバッグの後、コードは十分に機能しているように見えますが、ブラウザは再読み込みイベントを処理してから、新しく配置したスクロールを再配置しています...それは即座に発生しますが、直後にアラートを配置すると私のスクロールは、適切な画面位置を示しています。アラートを無視した後、ブラウザはスクロールをジャンプして IT が想定する場所に戻します (少なくとも Chrome ではそうです)。

私の質問は、ブラウザー (クロスブラウザー) がリロード イベントを処理しないようにする方法はありますか? タイムアウトでスクロールを遅らせることはうまくいくようですが、非常に専門的ではなく、びくびくしています。

私はもう試した

    $(document).unbind("scroll"); 

ここのどこかで推奨されているのを見ましたが、何もしませんでした。

助けてくれてありがとう。

4

2 に答える 2

2

これは、FF (18)、Chrome (24)、および IE (9) で機能するソリューションです。

ドキュメントの head セクションのスクリプトに次のコードを記述します。

function autoScroll() {
    var div = document.getElementById("mydiv");
    div.style.display = '';
    var top = div.offsetTop;
    if(window.scrollTop != top) 
        window.scrollTo(0, top);
}
function loadAutoScroll() {
    autoScroll();
    window.onload = null;
    return false;
}
function scrollAutoScroll() {
    autoScroll();
    window.setTimeout(function(){ window.onscroll = null; }, 100);
    return false;
}
window.onload = loadAutoScroll;
window.onscroll = scrollAutoScroll;

よりクリーンなソリューションが得られると確信しています。

于 2013-02-05T15:21:56.780 に答える
-1

これをページの頭に追加します

<style>
    body{
        overflow: hidden;
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
    }
</style>
<script>
    window.onload = function () {
      jQuery('body').css({'overflow': 'auto', 'position': 'static'});
      window.scrollTo(0, 0);
    };
</script>
于 2014-07-30T13:29:53.237 に答える