ドキュメントのスクロール位置を取得するにはどうすればよいですか?


82

ドキュメントのスクロール位置の値を取得するにはどうすればよいですか?

回答:


46
$(document).height() //returns window height

$(document).scrollTop() //returns scroll position from top of document

私は同じように考えていましたが、なぜconsole.log($(this).scrollTop())= 1187 console.log($(this).height())= 1762と大きく異なるのですか?ページの一番下までスクロールした場合は575px。それらの575pxはどこに行ったのですか?スクロールバーを576pxにすることはできません:)
誰か

3
ああ、また私のせい。Firebugウィンドウが開いたスクロールバーを見ていました。多くの場合、現在は576pxになります。:)ありがとう私はトピックが閉じていると思います。
誰か2010

101
-1-それはとてもいいことですが、についての質問には答えませんscrollHeight
ウェイン

8
正解です。これはjqueryの質問です。ただし、$(document).height()も$(document).scrollTop()も必要な情報を提供しません。リクエストはscrollHeightに対するものでした。scrollHeight値は、要素で使用可能な合計の高さです(スクロール可能な場合、その値はその高さよりも大きくなる可能性があります)。scrollTopは、要素が上からどれだけ離れているかを返します。利用可能な高さの合計はどちらも答えません。scrollHeightの理解についてはhelp.dottoro.com/ljbixkkn.phpを参照してください
teynon

4
これは、ドキュメントが現在スクロールされている高さに関する質問者の意図された質問に答えるため、回答としてマークされています... ergo "scrollHeight"。この名前が別のコンテキストで使用されているのは偶然です。
チェイスサンドマン2014

177

ここで取得する方法ですscrollHeightjQueryのセレクタを使用して得られた要素のを:

$(selector)[0].scrollHeight

場合selector要素(例えばのIDですelemId)、配列の0-索引付きアイテムを選択したい要素になります、とすることを保証されているscrollHeight正しいだろう。


12
Mozillaの知識ベースに基づいて、世話をする、それが8.0よりも低いIEのバージョンからサポートされていませんdeveloper.mozilla.org/en/DOM/element.scrollHeight
yodabar

2
@Tomasに同意し、クロスブラウザの癖をより適切に処理するためにjQueryの抽象化を使用します。たとえば、上記は$(selector).offset()。topに修正できます
Bob Gregor

3
ええと、$(document).offset()はnullを返しません。また、.offset()は、ブラウザーのスクロールバーの位置とは関係ありません(.offset()は、ドキュメントに対するアイテムの座標を返します)。可能な場合はjQueryを使用する必要があることに同意しますが、これにはクロスブラウザーのサポートがないため、jQueryは抽象化を提供していません。
BrainSlugs83 2012年

2
$(selector).get(0).scrollHeight
Ally

1
@Dmitri Zaitsev .scrollHeightはDOMノードプロパティであり、jQueryプロパティではありません。
Zemljoradnik 2014

45

Jquery 1.6以降を使用している場合は、propを使用して値にアクセスします。

$(document).prop('scrollHeight')

以前のバージョンはattrから値を取得するために使用されていましたが、1.6以降ではありませんでした。


12
これは、$(document).attr( "scrollHeight")と同様に、jQuery1.7.1では「undefined」を返します。
マイケル

5
これは、body要素が欠落しているためです。$(document.body).prop( 'scrollHeight')である必要があります-その時点で、document.body.scrollHeight;を使用することもできます。
goddogsrunning

6
document.getElementById("elementID").scrollHeight

$("elementID").scrollHeight

では、ドキュメントオブジェクトの要素IDは何ですか?...おそらく「document.body.scrollHeight」を意味しましたか?
BrainSlugs83 2012年

2
$( '#gallery')。scrollHeightは私に未定義を与えます//#galleryは私のオーバーフローのIDです:自動要素、機能しません
Anmol Saraf 2013年

6

HTML DOM要素を使用しますが、jQueryセレクターは使用しません。次のように使用できます。

var height = document.body.scrollHeight;

3

このような何かがあなたの問題を解決するはずです:

$.getDocHeight = function(){
     var D = document;
     return Math.max(Math.max(D.body.scrollHeight,    D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight, D.documentElement.clientHeight));
};

alert( $.getDocHeight() );

追伸:必要なたびにその関数を呼び出してください。アラートはテストを目的としています。


何らかの理由で、この関数は私にとって正しく機能しません。iframe内で使用します。<html>の実際の高さは256pxで、この関数は337pxを与え、どこから来ているのかわかりません。PS私はクローム18を使用しています
jurchiks

@jurchiks:私が見てみるために、そのiframeがどこにあるかへのリンクはありますか?
zuul 2012

Blade.dateks.lv/salidzinat?ids=58664,43586。疑問符のいずれかをクリックします。私はそれのほとんどを修正することができましたが、それらのうちの2つ(そして比較されているアイテムに応じてさらにあります)はまだ下部にいくつかの奇妙で神秘的な〜20pxのマージンがあります。ただし、ウィンドウのサイズ変更時にポップアップのサイズを変更したため、ウィンドウのサイズを変更すると表示されなくなります。
jurchiks 2012

3

ウィンドウのスクロールバーによってスクロールされる領域の実際のスクロール可能な高さを取得するために、を使用しました$('body').prop('scrollHeight')。これは最も簡単な解決策のようですが、互換性についてはあまりチェックしていません。Emanuele Del Grandeは、別のソリューションについて、これは8未満のIEではおそらく機能しないと述べています。

他のほとんどのソリューションはスクロール可能な要素に対しては正常に機能しますが、これはウィンドウ全体に対して機能します。特に、AnkitのソリューションについてMichaelと同じ問題がありました。つまり、$(document).prop('scrollHeight')が返されundefinedます。



0

たとえば、これを試すことができます。このコードは、すべてのDIVタグの下部にスクロールバーを配置します

注意:jQueryは、値の代わりに関数を引数として受け入れることができます。「this」はjQueryによって処理されるオブジェクトであり、関数は現在のDIV「this」のscrollHeightプロパティを返し、ドキュメント内のすべてのDIVに対してそれを実行します。

$("div").scrollTop(function(){return this.scrollHeight})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.