【JavaScript】アンカーリンクのスムーススクロールを実装する方法

【JavaScript】アンカーリンクのスムーススクロールを実装する方法 JavaScript

Webページ内で特定のセクションにスムーズにスクロールさせたい場合、JavaScriptを使うことで簡単に実装できます。本記事では、jQueryを使わずに、純粋なJavaScriptでスムーススクロールを実装する方法を紹介します。

scrollIntoView を使った簡単なスムーススクロール

scrollIntoView メソッドを使えば、簡単にスムーススクロールを実装できます。

document.addEventListener("DOMContentLoaded", function () {
  const links = document.querySelectorAll('a[href^="#"]'); // #で始まるリンクを取得

  links.forEach(link => {
    link.addEventListener("click", function (e) {
      e.preventDefault(); // デフォルトの動作を無効化
      const targetId = this.getAttribute("href").substring(1); // IDを取得
      const targetElement = document.getElementById(targetId);

      if (targetElement) {
        targetElement.scrollIntoView({ behavior: "smooth", block: "start" });
      }
    });
  });
});

document.querySelectorAll(‘a[href^=”#”]’) でページ内リンクを取得し、scrollIntoView({ behavior: “smooth” }) を使ってスムーススクロールを実現しています。

この方法は簡単に実装でき、JavaScriptの標準機能で動作するため軽量ですが、ナビゲーションバーが固定されている場合にスクロール位置がずれることがあります。

window.scrollTo を使ったスムーススクロール(オフセット調整可能)

固定ナビゲーションバーがある場合など、スクロール位置を調整したい場合は window.scrollTo を使用すると便利です。

document.addEventListener("DOMContentLoaded", function () {
  const links = document.querySelectorAll('a[href^="#"]');

  links.forEach(link => {
    link.addEventListener("click", function (e) {
      e.preventDefault();
      const targetId = this.getAttribute("href").substring(1);
      const targetElement = document.getElementById(targetId);

      if (targetElement) {
        const offsetTop = targetElement.getBoundingClientRect().top + window.scrollY - 50;

        window.scrollTo({
          top: offsetTop,
          behavior: "smooth"
        });
      }
    });
  });
});

getBoundingClientRect().top + window.scrollY で正確なスクロール位置を取得し、- 50 でスクロール位置を調整することで、固定ナビゲーションバーがある場合にも対応できます。

この方法はスクロール位置を細かく調整でき、scrollIntoView より柔軟な制御が可能ですが、コードが少し長くなります。

まとめ

JavaScriptを使えば、jQueryなしでも簡単にスムーススクロールを実装できます。scrollIntoView を使えばシンプルに実装できますが、固定ナビゲーションがある場合は window.scrollTo を使うことで、より調整しやすくなります。

用途に応じて最適な方法を選び、快適なユーザー体験を提供しましょう!