Web ブラウザで今表示されている部分(ビューポート)の位置、つまり現在のページのスクロール量を調べるには、以下のようにします。
window.addEventListener('scroll', function(event) {
console.log(window.pageYOffset); // 縦方向のスクロール量
console.log(window.pageXOffset); // 横方向のスクロール量
});
ここでは、スクロール時のイベントをハンドルして、座標表示を更新しています。
pageYOffset
の代わりに新しい scrollY
プロパティを使用することもできます。
新しいブラウザのほとんどは scrollY
プロパティもサポートしているので、scrollY
を使ってもよいでしょう。
互換性を重要視する jQuery などの実装では、pageYOffset
を使用しているようです。
上記のデモでは、ページをスクロールすると、スクロール後の表示位置がウィンドウ左上に表示されます。
jQuery を使った場合も、ほぼ同じように記述できますが、プレーンな JavaScript でももともと簡単なので、jQuery を使用する意味はほとんどありません(パフォーマンスが悪くなるだけ)。
$(function () {
var $wnd = $(window);
$wnd.scroll(function() {
console.log($wnd.scrollTop()); // 縦方向のスクロール量
console.log($wnd.scrollLeft()); // 横方向のスクロール量
});
});
window.pageYOffset
(scrollY
) や window.pageXOffset
(scrollX
) は、表示領域左上の座標しか取得できませんが、window.innerHeight
や window.innerWidth
を使ってウィンドウサイズを取得すれば、表示領域右下の座標を計算することができます。
window.addEventListener('scroll', function(event) {
var right = window.pageXOffset + window.innerWidth;
var bottom = window.pageYOffset + window.innerHeight;
console.log(right + ', ' + bottom);
});
window.innerWidth
には垂直方向のスクロールバーを含んだウィンドウ幅が格納されています。
jQuery の $(window).width()
を使用すると、スクロールバーのサイズを除いたウィンドウ幅を取得することができます。