1

JavaScriptコードでウェブサイトをスクロールしたい場合、.scrollTopプロパティを設定するcorrent要素は何ですか?

それは、、、windowまたはdocument要素document.bodyですかhtml

jQueryには、メインビューポートをスクロールして呼び出しを統合する意図を検出するためのトリックがありますか?うまくいくこともあるように思えます$(window).scroolTop(value)が、うまくいかないこともあります。

4

4 に答える 4

1

通常、<html>要素、別名document.documentElement。ただし、Quirksモードを使用している場合、<body>document.body)は代わりにビューポートを表します。(HTML / CSSはこれを明示的に述べたり要求したりしませんが、それはすべての最新のブラウザーがどのように機能するかです。)

クァークズモードになりたくはありませんが、他の人のページに含めるためのスクリプトを作成している場合は、それに対処する必要があります。

var viewport= document.compatMode==='BackCompat'? document.body : document.documentElement;
// do something with viewport.scrollTop

jQueryはwindow.scrollTo()、スクロールプロパティを直接設定する代わりにを使用します。どちらの方法も実際にはほとんど同じです。scrollTo特定の要素によって表されるビューポートに依存することを回避するという点で、usingは少しクリーンであると主張できますが、jQueryはscrollTop/を使用scrollLeftして'other'プロパティの現在の値を読み取る必要があるため、大きなメリットはありません。pageXOffset/を使用pageYOffsetして、特定の要素に依存せずに現在のスクロール位置を読み取ることができますが、どこでもサポートされているわけではないためscrollTopメソッドにフォールバックする必要があります。

残念ながら、これらのプロパティ/メソッドはいずれも過去に標準化されていません。CSSOMビューは最終的にこれに対処します。

于 2010-12-07T11:35:56.640 に答える
1

bobinceの答えには、奇妙なモードか標準モードかに関係なく、WebkitブラウザーがdocumentElement.scrollTopを誤ってゼロに設定するというライダーがいます。したがって、彼のワンライナーに完全に依存することはできません。

https://bugs.webkit.org/show_bug.cgi?id=9248

http://code.google.com/p/chromium/issues/detail?id=2891

十分な特権を持っている人は、これをbobinceの回答にコメントして、見逃さないようにする必要があります。そうすれば、この投稿を削除できます。

于 2010-12-08T20:59:20.700 に答える
0

スクロールする対象、ドキュメント/ウィンドウ、または分割によって異なります

于 2010-12-07T10:33:28.430 に答える
0

私も以前にこの問題を抱えていましたが、多くのブラウザでまったく異なる動作をしていました。私はこのかなり恐ろしいコードを使用することになりました:

function scrollToTop() {
    $('body, html').scrollTop(0);

    if ($.browser.webkit || $.browser.safari) {
        // Hack for webkit browsers: hide and show canvas layer so window will scroll up.
        // (scrollTop does not work right).
        $('#canvas').hide();
        window.setTimeout(function () {
            $('#canvas').show();
        }, 0);
    }
}

ただし、一番上までスクロールするだけで済み、簡単です。特定のポイントまでスクロールしたい場合、これをどのように行うかわかりません。多分アンカーを使用しますか?

于 2010-12-07T10:43:33.883 に答える