
JavaScriptで要素のスクロール位置を取得するにはどうすればいいですか?
Webページをスクロールすると、要素の表示位置が変化します。JavaScriptを使って、要素の現在のスクロール位置を取得したり、設定したりすることができます。この記事では、要素のスクロール位置を取得・設定する方法について解説します。
要素のスクロール位置の取得
要素のスクロール位置の取得には、element.scrollLeft と element.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 要素の scrollLeft と scrollTop プロパティを取得し、それぞれ水平方向、垂直方向のスクロール量を表示します。
参考資料
関連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