JavaScriptで要素のスクロール位置を取得するにはどうすればいいですか?

JavaScriptで要素のスクロール位置を取得するにはどうすればいいですか?

JavaScriptで要素のスクロール位置を取得するにはどうすればいいですか?

Webページをスクロールすると、要素の表示位置が変化します。JavaScriptを使って、要素の現在のスクロール位置を取得したり、設定したりすることができます。この記事では、要素のスクロール位置を取得・設定する方法について解説します。

要素のスクロール位置の取得

要素のスクロール位置の取得には、element.scrollLeftelement.scrollTop プロパティを使用します。

プロパティ 説明
element.scrollLeft 要素の左端からどれだけスクロールされているかを取得します。
element.scrollTop 要素の上端からどれだけスクロールされているかを取得します。

以下の例では、ボタンをクリックすると、指定した要素の現在のスクロール位置を取得して表示します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>スクロール位置の取得</title>
  <style>
    #container {
      width: 300px;
      height: 200px;
      overflow: auto;
    }
    #content {
      width: 600px;
      height: 400px;
      background-color: #f0f0f0;
    }
  </style>
</head>
<body>
  <div id="container">
    <div id="content"></div>
  </div>
  <button id="getScrollPosition">スクロール位置を取得</button>
  <div id="scrollPosition"></div>

  <script>
    const container = document.getElementById('container');
    const scrollPosition = document.getElementById('scrollPosition');
    const getScrollPositionButton = document.getElementById('getScrollPosition');

    getScrollPositionButton.addEventListener('click', () => {
      const scrollLeft = container.scrollLeft;
      const scrollTop = container.scrollTop;
      scrollPosition.textContent = `scrollLeft: ${scrollLeft}, scrollTop: ${scrollTop}`;
    });
  </script>
</body>
</html>

上記コードでは、#container 要素はスクロール可能な要素で、 #content 要素はその中身です。ボタンをクリックすると、#container 要素の scrollLeftscrollTop プロパティを取得し、それぞれ水平方向、垂直方向のスクロール量を表示します。

参考資料

関連QA

Q1: スクロール位置を取得できる要素は、どのような要素ですか?

A1: スクロールバーを持つ要素、つまり overflow プロパティの値が scroll, auto, overlay のいずれかである要素のスクロール位置を取得できます。

Q2: `window` オブジェクトのスクロール位置はどうやって取得できますか?

A2: `window` オブジェクトのスクロール位置を取得するには、`window.pageXOffset` (`window.scrollX` と同等) と `window.pageYOffset` (`window.scrollY` と同等) を使用します。

Q3: スクロール位置を取得して、何か処理を実行したいのですが、どのようにすれば良いですか?

A3: スクロールイベントリスナー ( `window.addEventListener('scroll', ...)` ) を使用して、スクロールが発生するたびに処理を実行できます。イベントリスナー内でスクロール位置を取得し、目的の処理を実行します。

その他の参考記事:jquery done