Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
現在位置を取得するときのの基準となる、ウィンドウ・サイズ、ドキュメント・サイズ、スクロール量を取得するJavascript。ブラウザ互換とかで割りと苦労しました。
以下にソースを出します。
スクロール量を取得
function getScrollPosition() {
var obj = new Object();
obj.x = document.documentElement.scrollLeft || document.body.scrollLeft;
obj.y = document.documentElement.scrollTop || document.body.scrollTop;
return obj;
}
memo: Safariではscroll系が未対応なので、巧く値が取れないみたいです。う~ん ^^;
ウィンドウ・サイズを取得
function getScreenSize() {
var obj = new Object();
if (!isSafari && !isOpera) {
obj.x = document.documentElement.clientWidth || document.body.clientWidth || document.body.scrollWidth;
obj.y = document.documentElement.clientHeight || document.body.clientHeight || document.body.scrollHeight;
} else {
obj.x = window.innerWidth;
obj.y = window.innerHeight;
}
obj.mx = parseInt((obj.x)/2);
obj.my = parseInt((obj.y)/2);
return obj;
}
上記に必要なUser Agentを判別する処理が、以下。
var isWin9X = (navigator.appVersion.toLowerCase().indexOf('windows 98')+1);
var isIE = (navigator.appName.toLowerCase().indexOf('internet explorer')+1?1:0);
var isOpera = (navigator.userAgent.toLowerCase().indexOf('opera')+1?1:0);
if (isOpera) isIE = false;
var isSafari = (navigator.appVersion.toLowerCase().indexOf('safari')+1?1:0);
ドキュメント・サイズを取得
document.body.offsetWidth;document.body.offsetHeight;document.documentElement.scrollWidth || document.body.scrollWidth;
document.documentElement.scrollHeight || document.body.scrollHeight;
2008.10.28 追記: offsetWidthでは画面表示領域しか取れなかったので、scrollWidthに修正。表示モードによって取り方が違うほか、ウィンドウサイズより実体が小さい場合にはそっちの値が出るので、注意が必要です。
関連項目
参考サイト
- scottschiller.com v4
- ブラウザのスクロール量を取得するには?, Diaspar Jounal
- ブラウザのスクロールバーで隠れている領域を含むサイズを取得する方法, Enjoy*Study
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。
9 Comments
Safari 1.0.3ではスクロール量の所のみ真っ白で、他は問題ないようでした。
1.3.1だと全部真っ白、ということでしょうか? 2007–04–15 18:00
スクロールバーの位置を取得取得したいのですが方法はないでしょうか? 2007–06–07 11:18
x = window.pageXOffset;
y = window.pageYOffset;
どうでしょ? 2007–06–09 23:36
document.documentElement.offsetXxx なども試してみましたがダメでした。
もし解決方法をご存知であればご教授いただきたいです。 2008–03–24 18:10
「document.body.offsetWidth;」なんかはブラウザが標準モードか互換モードかによって使えるプロパティが変わりますので、ひょっとしたらそれかもしれませんね。互換モードだと、確か「document.body.clientWidth」だったかな... その辺はうろ覚えですが。ちなみに、このページは標準モードでやってます。
モードの説明は割愛。
びんどめさんの環境でも「このページの」ドキュメント・サイズが表示されているなら、安心してください。ちゃんと取れてます。
いま言えるのはそれくらいかな? 2008–03–25 03:15
いろいろと表示させてみたところ、document.body.scrollHeight でそれらしい値が得られました。
クロスブラウザはやっぱり大変ですね…。 2008–03–26 18:59
良いねぇ。 2011–03–11 11:17
利用させて貰うと思うのでコメントで作ったものにHP名とリンク乗せます。
ほんとに皆さん凄いですね・・・。 2012–01–29 18:46