スクロールインジケーターを使ってページ内ナビゲーションを実装しよう!

CSS、JavaScript

ファーストビューに「下の方にもコンテンツがあるよ!」と分かりやすくするために「SCROLL↓」というインジゲーターを設置する方法をご紹介。
ただ、表示するだけではなあく、矢印はアニメーションで動くのでより視覚的に。
そしてファーストビューから離れれば自動的に消えるのちょっと変わって、便利な機能になってます。

See the Pen Scroll_animation by kasasagi_kmnmc (@kasasagi_kmnmc) on CodePen.

HTMLの基本構造

まずは、ページの基本的な構造を確認しましょう。以下のHTMLコードを使います。このコードをそのままコピーして利用することができます。

<div class="scroll-indicator">
  <span>Scroll</span>
  <div class="arrow"></div>
</div>

<section id="section1">
  <h2>Section 1</h2>
  <p>Content of Section 1...</p>
</section>

<section id="section2">
  <h2>Section 2</h2>
  <p>Content of Section 2...</p>
</section>

<section id="section3">
  <h2>Section 3</h2>
  <p>Content of Section 3...</p>
</section>

このHTMLでは、「section」要素を使ってページのセクションを定義し、「scroll-indicator」というクラスを持つ要素を使ってスクロールインジケーターを配置しています。

CSSでスタイルを設定する

次に、これらの要素にスタイルを追加しましょう。

html {
  scroll-behavior: smooth; /* スムーズスクロールを有効にする */
}

body {
  font-family: Arial, sans-serif; /* デフォルトのフォントを指定 */
  line-height: 1.6; /* 行の高さを1.6倍に設定 */
  margin: 0;
  padding: 0;
}

.scroll-indicator {
  position: fixed; /* 画面に固定される位置 */
  bottom: 30px; /* 画面下からの距離 */
  left: 50%; /* 画面の中央に配置 */
  transform: translateX(-50%); /* 中央寄せ */
  text-align: center; /* テキストを中央揃え */
  z-index: 1000; /* 最前面に表示 */
  opacity: 1; /* 初期状態は表示 */
  transition: opacity 0.3s ease; /* フェードイン・アウトのアニメーション */
}

.scroll-indicator.hidden {
  opacity: 0; /* 非表示時は透明にする */
}

.scroll-indicator span {
  display: block; /* ブロック要素として表示 */
  font-size: 24px; /* フォントサイズ */
  margin-bottom: 5px; /* 下のマージン */
  color: #555; /* テキストの色 */
}

.arrow {
  width: 24px; /* 矢印の幅 */
  height: 24px; /* 矢印の高さ */
  border: solid #555; /* 矢印の色と太さ */
  border-width: 0 2px 2px 0; /* 矢印の形状 */
  transform: rotate(45deg); /* 矢印を反時計回りに45度回転 */
  margin: -10px auto 0; /* 中央揃え */
  animation: arrowMove 1s infinite; /* 矢印のアニメーション */
}

@keyframes arrowMove {
  0%, 100% {
    transform: translateY(0) rotate(45deg); /* 初期と最終の位置 */
  }
  50% {
    transform: translateY(6px) rotate(45deg); /* 50%の位置 */
  }
}

section#section1 {
  height: 100vh; /* ビューポートの高さに設定 */
  padding: 100px 20px; /* 上下左右のパディング */
  background-color: #f4f4f4; /* 背景色 */
}

section#section2,
section#section3 {
  height: 50vh; /* ビューポートの高さに設定 */
  padding: 100px 20px; /* 上下左右のパディング */
  background-color: #f4f4f4; /* 背景色 */
}

section:nth-of-type(even) {
  background-color: #fff; /* 偶数のセクションの背景色 */
}

このCSSは、スクロールインジケーターのデザインや各セクションのスタイルを定義しています。特に、「scroll-indicator」クラスを持つ要素には、表示・非表示のアニメーション効果が付けられています。

JavaScriptで動作を追加する

最後に、JavaScriptを使用してスクロールイベントを監視し、スクロールインジケーターの表示・非表示を制御します。以下がscript.jsファイルの内容です。

window.addEventListener("scroll", function() {
  // #section1 の要素を取得
  var section1 = document.querySelector("#section1");

  // #section1 の下端の位置を計算する
  var section1Bottom = section1.offsetTop + section1.offsetHeight;

  // 現在のスクロール位置を取得
  var scrollPosition = window.scrollY + window.innerHeight;

  // スクロール位置が #section1 の下端よりも下にあれば、スクロールインジケーターを非表示にする
  if (scrollPosition > section1Bottom) {
    scrollIndicator.classList.add("hidden");
  } else {
    scrollIndicator.classList.remove("hidden");
  }
});

現在のコードではご覧の通り「section1」よりもスクロールされてばインジゲーターが非表示になるように「scrollIndicator」要素に「hidden」が追加されるようにしています。

まとめ

以上で、スクロールインジケーターを使ったページ内ナビゲーションの実装方法について、初心者向けに詳しく解説しました。この記事を参考にして、自分のウェブページやプロジェクトにも実装してみてください。コピペして利用する際は、ファイルの分割と統合、新しいセクションの追加とスタイルの調整などご自分の環境に合わせて修正してください。

タイトルとURLをコピーしました