【JavaScript】スクロール位置を取得・設定する

JavaScript

JavaScriptでスクロール位置を取得する

scrollYプロパティで縦方向のスクロール位置を取得する

windowオブジェクトのscrollYプロパティを取得することで、取得時点での縦方向のスクロール位置を取得することができます。

// スクロールされた時、現在の縦方向のスクロール位置をコンソールに出力する
window.addEventListener('scroll', () => {
  const y = window.scrollY;
  console.log(y);
});

windowオブジェクトにaddEventListenerでscrollイベントを追加することで、ブラウザ上でスクロールされた時に処理を実行することができるようになります。

また、windowオブジェクトのonscrollプロパティに処理を代入することでも実装できます。

window.onscroll = () => {
  const y = window.scrollY;
  console.log(y);
}

この場合、先に付与されている処理がある場合は、その処理が上書きされるので注意しましょう。

scrollXプロパティで横方向のスクロール位置を取得する

横方向のスクロール位置を取得するためには、windowオブジェクトのscrollXプロパティを取得します。

縦方向のスクロール位置をscrollYプロパティを取得する場合と同様の操作を行います。

// スクロールされた時、現在の横方向のスクロール位置をコンソールに出力する
window.addEventListener('scroll', () => {
  const x = window.scrollX;
  console.log(x);
});

addEventListenerではなく、onscrollプロパティを使用する場合↓

window.onscroll = () => {
  const x = window.scrollX;
  console.log(x);
}

IE8以下に対応する場合

ここまでご紹介してきた scrollYプロパティや scrollXプロパティは、IE8以下に対応していないためIE8以下に対応させたい場合別の方法を利用する必要があります。

// IE7 ~ IE8 に対応させる
const x = document.documentElement.scrollLeft; // 横方向
const y = document.documentElement.scrollTop; // 縦方向
// IE6 以下に対応させる」
const x = document.body.scrollLeft; // 横方向
const y = document.body.scrollTop; // 縦方向

JavaScriptで指定した位置までスクロールさせる

scrollTo()メソッドを利用する

scrollTo()メソッドでは、絶対位置を指定して画面をスクロールさせます。

scrollTo(0, 1000);

第一引数に横方向のスクロール位置を、第二引数に縦方向のスクロール位置を指定します。

↑のサンプルコードの場合、ページの先頭から縦1000pxの場所までスクロールします。

scrollBy()メソッドを利用する

JavaScriptで画面をスクロールさせる方法にはscrollBy()メソッドというのも存在します。

scrollTo()メソッドで絶対位置を指定したのに対して、scrollBy()メソッドでは、現在の地点からの相対位置を指定します。

scrollBy(0, 1000);

引数には、scrollTo()メソッドと同様に第一引数に横方向のスクロール量を、第二引数に縦方向のスクロール量を指定します。

また、上へスクロールさせたい時には、第二引数にマイナスの値を指定します。

scrollBy(0, -1000);

JavaScriptでのスクロールにアニメーションをつける

scrollTo()メソッドをカスタマイズする

scrollTo({
  top: 1000,
  left: 0,
  behavior: 'smooth'
}); 

behavior: ‘smooth’ と記述することで、アニメーション付きでスクロールさせることができます。

top、leftはそれぞれ縦横スクロールの絶対位置です。

jQueryのanimate()メソッドを利用する

$("html,body").animate({scrollTop:1000},500);

上記例では、ページ先頭から縦1000pxの時点に0.5sかけてスクロールします。

純粋なJavaScriptではないですが、jQueryを利用することで簡単にスクロールにアニメーションを付けることができます。

コメント

タイトルとURLをコピーしました