スクロール位置でナビリンクを自動ハイライト|IntersectionObserverで「今ここ」表示を実装する方法
スポンサーリンク

こんにちは!静岡県浜松市でWEBデザイナーをしています小瀧です。

長めの1ページサイトや、セクションが分かれているサービス紹介ページなどで、「いま自分がどこを読んでいるか」をナビゲーションで視覚的に伝えてくれるUIって見かけますよね。

そう、ナビゲーションの中に「今ここ!」って感じでリンクがハイライトされたり、下線がついたり、背景色が変わったり。

この機能、「スクロール連動の現在地表示」と呼ばれるものです。

今回はこの“今ここ表示”を、JavaScriptとCSSでスムーズに実装する方法をご紹介します!

「今ここ表示」のメリットとは?

ユーザーに「いまどこにいるか」を知らせることで、

  • ページの構造が把握しやすくなる
  • スクロール中の迷子防止になる
  • 目的の情報までスムーズにアクセスできる
  • サイトの信頼性・操作性がアップ

というUX上の大きなメリットがあります。
とくに、長めのコンテンツやセクション数が多いページでは効果絶大です。

実際のコード

埋め込みのCodePenでは動かなかったため、右上の「CodePen」ロゴをクリックして飛ぶと見られます。

See the Pen
Untitled
by 小瀧賢 (@ekwwawpb-the-styleful)
on CodePen.

スポンサーリンク

HTML:セクションとナビゲーションの構造

まずは基本となるナビゲーションと各セクションの構造を用意しましょう。

<nav>
  <ul id="nav">
    <li><a href="#section1">セクション1</a></li>
    <li><a href="#section2">セクション2</a></li>
    <li><a href="#section3">セクション3</a></li>
  </ul>
</nav>

<section id="section1">…</section>
<section id="section2">…</section>
<section id="section3">…</section>

リンクとセクションの id をしっかり対応させるのがポイントです。

CSS:アクティブ状態のスタイル

「今ここ」を目立たせるために、active クラスにスタイルを定義します。

#nav a {
  text-decoration: none;
  padding: 0.5em;
  display: inline-block;
  color: #333;
  transition: background 0.3s;
}

#nav a.active {
  background-color: #2196f3;
  color: white;
  border-radius: 4px;
}

見た目を一目で変えることで、ユーザーの視線誘導にもつながります。

JavaScript:Intersection Observerで現在地を判定

今っぽく実装するなら、IntersectionObserver APIを使うのが簡単&高パフォーマンスです。

const sections = document.querySelectorAll("section");
const navLinks = document.querySelectorAll("#nav a");

const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    const id = entry.target.getAttribute("id");
    const link = document.querySelector(`#nav a[href="#${id}"]`);

    if (entry.isIntersecting) {
      navLinks.forEach(link => link.classList.remove("active"));
      link.classList.add("active");
    }
  });
}, {
  threshold: 0.6
});

sections.forEach(section => {
  observer.observe(section);
});

このコードでは、各セクションが画面の60%以上見えたときに「今ここ」と判定し、対応するリンクに active クラスを付与しています。

応用:ヘッダーの高さを考慮したスクロールにも対応

固定ヘッダーがある場合、リンククリックでスクロールした際に見出しが隠れてしまう問題があります。
その場合は、scroll-margin-topscroll-padding-top をCSSで調整しましょう。

html {
  scroll-padding-top: 60px;
}

また、ページ内スクロールをスムーズにしたいときは下記を追加するだけでOKです。

html {
  scroll-behavior: smooth;
}

まとめ:ナビゲーションに「今ここ」表示をつけるとサイトが生きる!

ユーザーにとって「いま自分がどこにいるか」が明確なサイトは、迷わず使える・信頼できる・ストレスがないサイトです。

  • IntersectionObserverでパフォーマンス良く現在地を検出
  • active クラスで視覚的にリンクを強調
  • すべてのリンクが「今ここ」を伝えるナビゲーションに!

今回のテクニックを取り入れれば、一気にプロ感のあるUIに変身します。
ぜひあなたのWebサイトにも実装して、ユーザー体験をひとつ上のレベルへ!

 

satokotadesignキャンペーン実施中!

浜松市の飲食店限定|ホームページ無料作成サービス
ぶっちゃけ無料相談会!ホームページ制作の悩み話してみませんか?
satokotadesign4周年記念キャンペーン

静岡県浜松市でホームページ制作ならsatokotadesign
静岡県浜松市でホームページ制作ならsatokotadesign

スポンサーリンク
おすすめの記事