HTMLページをスムーズにスクロールさせる!アンカーリンクとJavaScript/jQueryによる実装方法

2024-04-27

HTMLページを指定されたアンカーにスクロールする方法

この機能を実現するには、主に以下の3つの方法があります。

HTMLのアンカーリンク

HTMLの<a>タグを使って、ページ内リンクを作成することができます。

<a href="#target">リンクテキスト</a>

上記の例では、「リンクテキスト」をクリックすると、ページ内の id="target" 要素までスクロールします。

JavaScriptを使用して、より動的なスクロールを実現することができます。

document.getElementById('target').scrollIntoView({
  behavior: 'smooth'
});

上記のコードは、id="target" 要素までスムーズにスクロールします。

jQueryライブラリを使用すると、より簡潔にコードを書くことができます。

$(document).ready(function(){
  $("a[href='#target']").on('click', function(e){
    e.preventDefault();
    $(window).scrollTo('#target', {
      duration: 500,
      easing: 'linear'
    });
  });
});

上記のコードは、a[href="#target"] 要素がクリックされたときに、#target 要素まで500ミリ秒かけてスクロールします。

補足

  • アンカー要素には、id 属性の代わりに name 属性を使用することもできます。
  • JavaScriptやjQueryを使用する場合は、ライブラリの読み込みが必要となります。
  • スムーズなスクロールを実現するには、behavior または easing オプションを指定することができます。

上記以外にも、様々な方法でスクロールを実現することができます。用途や目的に合わせて、適切な方法を選択してください。




HTML

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>スクロールサンプル</title>
</head>
<body>
  <h1>ページトップ</h1>

  <a href="#section1">セクション1へ移動</a>
  <a href="#section2">セクション2へ移動</a>
  <a href="#section3">セクション3へ移動</a>

  <section id="section1">
    <h2>セクション1</h2>
    <p>セクション1の内容です。</p>
  </section>

  <section id="section2">
    <h2>セクション2</h2>
    <p>セクション2の内容です。</p>
  </section>

  <section id="section3">
    <h2>セクション3</h2>
    <p>セクション3の内容です。</p>
  </section>

  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script>
    $(document).ready(function(){
      $("a[href='#section1']").on('click', function(e){
        e.preventDefault();
        $(window).scrollTo('#section1', {
          duration: 500,
          easing: 'linear'
        });
      });

      $("a[href='#section2']").on('click', function(e){
        e.preventDefault();
        $(window).scrollTo('#section2', {
          duration: 500,
          easing: 'linear'
        });
      });

      $("a[href='#section3']").on('click', function(e){
        e.preventDefault();
        $(window).scrollTo('#section3', {
          duration: 500,
          easing: 'linear'
        });
      });
    });
  </script>
</body>
</html>

JavaScript

document.getElementById('section1').scrollIntoView({
  behavior: 'smooth'
});

jQuery

$(document).ready(function(){
  $("a[href='#section1']").on('click', function(e){
    e.preventDefault();
    $(window).scrollTo('#section1', {
      duration: 500,
      easing: 'linear'
    });
  });
});

説明

上記のコードでは、以下の処理が行われます。

  • HTMLページに3つのセクションと、各セクションへ移動するためのリンクを作成します。
  • JavaScriptまたはjQueryを使用して、リンクをクリックしたときに、対応するセクションまでスムーズにスクロールする処理を記述します。
  • 上記のコードはあくまで一例です。必要に応じて、アレンジしてください。
  • JavaScriptとjQueryのコードは、それぞれ別の <script> タグで記述する必要があります。



その他のスクロール方法

以下に、いくつか例を挙げます。

CSSの scroll-behavior プロパティを使用すると、ページ内リンクをクリックしたときのスクロール挙動を指定することができます。

a[href="#target"] {
  scroll-behavior: smooth;
}

CSSの animation プロパティを使用して、アニメーション付きのスクロールを実現することができます。

#target {
  animation: scroll 1s ease-in-out;
}

@keyframes scroll {
  0% {
    transform: translateY(0);
  }
  100% {
    transform: translateY(-100px); /* スクロール量を調整 */
  }
}

上記のコードは、#target 要素をクリックすると、1秒かけて100ピクセル下へスクロールするアニメーションを実行します。

ブラウザのネイティブ機能

一部のブラウザでは、ネイティブ機能でページ内スクロールを実現することができます。

  • Safari: window.scrollTo() 関数を使用して、指定された要素までスクロールすることができます。
  • Chrome: history.scrollRestoration プロパティを使用して、以前のスクロール位置を復元することができます。

これらの方法は、比較的新しい技術であり、すべてのブラウザで対応しているわけではありません。

HTMLページを指定されたアンカーにスクロールするには、様々な方法があります。

今回紹介した方法以外にも、まだまだ多くの方法が存在します。

最適な方法は、用途や目的に合わせて選択することが重要です。


javascript jquery html


HTML、CSS、XHTMLで「Center Align on a Absolutely Positioned Div」

margin: 0 auto; を使用するこれは、最も簡単な方法の一つです。以下のコードのように、div要素に position: absolute; と margin: 0 auto; を設定します。Flexbox は、要素を柔軟に配置するためのレイアウトシステムです。以下のコードのように、親要素に display: flex; と justify-content: center; および align-items: center; を設定します。...


jQuery vs JavaScript: div要素作成方法の比較

jQueryは、JavaScriptライブラリの一つで、Webページの操作を簡潔に記述できます。このページでは、jQueryを使ってdiv要素を作成する方法を解説します。方法jQueryでdiv要素を作成するには、以下の2つの方法があります。...


jQueryでdivの一番下までスクロールしたことを検出する方法

方法1: $(window).scrollTop() と $(div).height() を使用するこの方法は、windowオブジェクトの scrollTop プロパティと、div要素の height プロパティを使用して、ユーザーがスクロールした位置とdivのの高さを比較します。...


Reactで「label」要素と「input」要素を正しく関連付ける!「for」属性以外にも使える方法とは

React-js では、label 要素の for 属性が意図したように動作しない場合があります。これは、React-js が独自のラベル管理システムを使用しているためです。原因React-js では、label 要素と input 要素間の関連付けを id 属性ではなく、name 属性を使用して行います。そのため、for 属性で指定した id と input 要素の name が一致しない場合、label 要素と input 要素が関連付けられず、クリックしてもフォーカスが移動しません。...


TypeScript で発生する「TypeError: オブジェクト '[object Array]' の読み取り専用プロパティ '0' に割り当てられない」エラーの原因と解決策

readonly キーワードの使用:TypeScriptでは、readonly キーワードを使ってプロパティを明示的に読み取り専用として宣言できます。 例えば、以下のようなコードの場合、obj. x は読み取り専用となり、書き換えることはできません。...