ページサイズやスクロール位置を取得する

/web/javascript

Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。

現在位置を取得するときのの基準となる、ウィンドウ・サイズ、ドキュメント・サイズ、スクロール量を取得するJavascript。ブラウザ互換とかで割りと苦労しました。

  • スクロール量(横):
  • スクロール量(縦):
  • ウィンドウ・サイズ(横):
  • ウィンドウ・サイズ(縦):
  • ウィンドウの中央位置(横):
  • ウィンドウの中央位置(縦):
  • ドキュメント・サイズ(横):
  • ドキュメント・サイズ(縦):

以下にソースを出します。

スクロール量を取得

  1. function getScrollPosition() {
  2. var obj = new Object();
  3. obj.x = document.documentElement.scrollLeft || document.body.scrollLeft;
  4. obj.y = document.documentElement.scrollTop || document.body.scrollTop;
  5. return obj;
  6. }

memo: Safariではscroll系が未対応なので、巧く値が取れないみたいです。う~ん ^^;

ウィンドウ・サイズを取得

  1. function getScreenSize() {
  2. var obj = new Object();
  3. if (!isSafari && !isOpera) {
  4. obj.x = document.documentElement.clientWidth || document.body.clientWidth || document.body.scrollWidth;
  5. obj.y = document.documentElement.clientHeight || document.body.clientHeight || document.body.scrollHeight;
  6. } else {
  7. obj.x = window.innerWidth;
  8. obj.y = window.innerHeight;
  9. }
  10. obj.mx = parseInt((obj.x)/2);
  11. obj.my = parseInt((obj.y)/2);
  12. return obj;
  13. }

上記に必要なUser Agentを判別する処理が、以下。

  1. var isWin9X = (navigator.appVersion.toLowerCase().indexOf('windows 98')+1);
  2. var isIE = (navigator.appName.toLowerCase().indexOf('internet explorer')+1?1:0);
  3. var isOpera = (navigator.userAgent.toLowerCase().indexOf('opera')+1?1:0);
  4. if (isOpera) isIE = false;
  5. var isSafari = (navigator.appVersion.toLowerCase().indexOf('safari')+1?1:0);

ドキュメント・サイズを取得

  1. document.body.offsetWidth;
  2. document.body.offsetHeight;
  3. document.documentElement.scrollWidth || document.body.scrollWidth;
  4. document.documentElement.scrollHeight || document.body.scrollHeight;

2008.10.28 追記: offsetWidthでは画面表示領域しか取れなかったので、scrollWidthに修正。表示モードによって取り方が違うほか、ウィンドウサイズより実体が小さい場合にはそっちの値が出るので、注意が必要です。

関連項目

参考サイト

Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。

9 Comments

Anonymous wrote:
Safari1.3.1(v312.3)ではスクロールどころか何も表示されません。 2007–04–14 00:39
Sig. wrote:
報告ありがとうございます。
Safari 1.0.3ではスクロール量の所のみ真っ白で、他は問題ないようでした。
1.3.1だと全部真っ白、ということでしょうか? 2007–04–15 18:00
Anonymous wrote:
Netscakpe4.75ではテキストボックスはすべて空白で表示されます。。
スクロールバーの位置を取得取得したいのですが方法はないでしょうか? 2007–06–07 11:18
Sig. wrote:
NN4なら、確かこんな感じで取得できたような覚えがあります。

x = window.pageXOffset;
y = window.pageYOffset;

どうでしょ? 2007–06–09 23:36
ぴんどめ wrote:
IE 6 だと、document.body.offsetXxx でドキュメントサイズを取得できません…。
document.documentElement.offsetXxx なども試してみましたがダメでした。
もし解決方法をご存知であればご教授いただきたいです。 2008–03–24 18:10
Sig. wrote:
Sig.のIE6 では取得できているので、IE6で取れないってことではない筈です。
「document.body.offsetWidth;」なんかはブラウザが標準モードか互換モードかによって使えるプロパティが変わりますので、ひょっとしたらそれかもしれませんね。互換モードだと、確か「document.body.clientWidth」だったかな... その辺はうろ覚えですが。ちなみに、このページは標準モードでやってます。

モードの説明は割愛。
びんどめさんの環境でも「このページの」ドキュメント・サイズが表示されているなら、安心してください。ちゃんと取れてます。
いま言えるのはそれくらいかな? 2008–03–25 03:15
ぴんどめ wrote:
Sig. さん、ありがとうございます。
いろいろと表示させてみたところ、document.body.scrollHeight でそれらしい値が得られました。
クロスブラウザはやっぱり大変ですね…。 2008–03–26 18:59
皆川源太郎 wrote:
Safari4,0,4だけど、問題なく表示出来てる。
良いねぇ。 2011–03–11 11:17
T.T-Four wrote:
溜息しかでないです。
利用させて貰うと思うのでコメントで作ったものにHP名とリンク乗せます。
ほんとに皆さん凄いですね・・・。 2012–01–29 18:46