指定した要素の位置へスクロールする - JavaScript

JavaScriptで指定した要素の位置にスクロールするコードを紹介します。

概要

JavaScriptで指定した位置にスクロールするには、 document.documentElement.scrollTop にスクロールしたい位置の座標を代入することで指定位置にスクロールできます。指定した要素の位置にスクロールする場合は、あらかじめ、要素の座標を取得して、その値を document.documentElement.scrollTop に代入します。

プログラム

コード

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
    <!--
    .section{
      height:320px;
      border:1px solid #ff6a00;
    }
    -->
    </style>
    <script type="text/javascript">
        function ScrollWindow(elem) {
            var element = document.getElementById(elem);
            var rect = element.getBoundingClientRect();
            var elemtop = rect.top + window.pageYOffset;
            document.documentElement.scrollTop = elemtop;
        }

    </script>
</head>
<body>
    <div id="section1" class="section">
        Section1<br />
        <a id="link_section2" href="javascript:void(0);" onclick="ScrollWindow('section2');">Section2</a><br />
        <a id="link_section3" href="javascript:void(0);" onclick="ScrollWindow('section3');">Section3</a><br />
        <a id="link_section4" href="javascript:void(0);" onclick="ScrollWindow('section4');">Section4</a><br />
        <a id="link_section5" href="javascript:void(0);" onclick="ScrollWindow('section5');">Section5</a><br />
        <a id="link_section6" href="javascript:void(0);" onclick="ScrollWindow('section6');">Section6</a><br />
        <a id="link_section7" href="javascript:void(0);" onclick="ScrollWindow('section7');">Section7</a><br />
        <a id="link_section8" href="javascript:void(0);" onclick="ScrollWindow('section8');">Section8</a><br />
    </div>
    <div id="section2" class="section">Section2</div>
    <div id="section3" class="section">Section3</div>
    <div id="section4" class="section">Section4</div>
    <div id="section5" class="section">Section5</div>
    <div id="section6" class="section">Section6</div>
    <div id="section7" class="section">Section7</div>
    <div id="section8" class="section">Section8</div>
</body>
</html>

解説

ページのリンクのクリックにより、ScrollWindow 関数が呼び出されます。ScrollWindow 関数の第一引数にスクロールにより表示したい位置の要素を指定します。

ScrollWindow関数は下記の処理となっています。最初の行で関数に与えられた第一引数の要素名を document.getElementById メソッドに与えて、引数に与えられたIDの要素を取得します。続いて、取得した要素の getBoundingClientRect() メソッドを呼び出し、要素の座標値を取得します。取得した座標値に、window.pageYOffset を加算してページ全体の縦位置を取得します。(座標値の取得の詳細はこちらの記事も参照してください。)
取得できた座標値を document.documentElement.scrollTop に代入することで、指定した位置に画面をスクロールできます。
  function ScrollWindow(elem) {
    var element = document.getElementById(elem);
    var rect = element.getBoundingClientRect();
    var elemtop = rect.top + window.pageYOffset;
    document.documentElement.scrollTop = elemtop;
  }

実行結果

上記のHTMLファイルをWebブラウザで開きます。下図の画面が表示されます。


[Section3]のリンクをクリックすると、Section3の枠の位置までスクロールします。


同様に[Section5]のリンクをクリックすると、Section5の枠の位置までスクロールします。


[Section8]のリンクをクリックすると、Section8の枠の位置までスクロールします。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2019-07-08
iPentec all rights reserverd.