JavaScriptコードでウェブサイトをスクロールしたい場合、.scrollTop
プロパティを設定するcorrent要素は何ですか?
それは、、、window
またはdocument
要素document.body
ですかhtml
?
jQueryには、メインビューポートをスクロールして呼び出しを統合する意図を検出するためのトリックがありますか?うまくいくこともあるように思えます$(window).scroolTop(value)
が、うまくいかないこともあります。
JavaScriptコードでウェブサイトをスクロールしたい場合、.scrollTop
プロパティを設定するcorrent要素は何ですか?
それは、、、window
またはdocument
要素document.body
ですかhtml
?
jQueryには、メインビューポートをスクロールして呼び出しを統合する意図を検出するためのトリックがありますか?うまくいくこともあるように思えます$(window).scroolTop(value)
が、うまくいかないこともあります。
通常、<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ビューは最終的にこれに対処します。
bobinceの答えには、奇妙なモードか標準モードかに関係なく、WebkitブラウザーがdocumentElement.scrollTopを誤ってゼロに設定するというライダーがいます。したがって、彼のワンライナーに完全に依存することはできません。
https://bugs.webkit.org/show_bug.cgi?id=9248
http://code.google.com/p/chromium/issues/detail?id=2891
十分な特権を持っている人は、これをbobinceの回答にコメントして、見逃さないようにする必要があります。そうすれば、この投稿を削除できます。
スクロールする対象、ドキュメント/ウィンドウ、または分割によって異なります
私も以前にこの問題を抱えていましたが、多くのブラウザでまったく異なる動作をしていました。私はこのかなり恐ろしいコードを使用することになりました:
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);
}
}
ただし、一番上までスクロールするだけで済み、簡単です。特定のポイントまでスクロールしたい場合、これをどのように行うかわかりません。多分アンカーを使用しますか?