LESSON / WP LOAD

LPにJavaScriptで動きを付ける

JavaScriptでメニューやスクロール表示を実装し、操作可能性と動きを減らす設定へ対応します。

目安 90分 コース進捗 0 / 12

GOAL

このレッスンでできるようになること

  • 必要な動きだけをJavaScriptで実装できる
  • メニューの開閉状態を属性へ反映できる
  • スクロール表示をIntersection Observerで実装できる

LPの動きは、内容を理解しやすくしたり、操作結果を伝えたりするために追加します。装飾のために動きを増やし、読むまで待たせたり操作を妨げたりしないでください。

この教材ではjQueryを前提にせず、ブラウザ標準のJavaScriptで実装します。

最初に必要な動きを一覧にする

  • スマートフォンメニューの開閉
  • ページ内リンクへの移動
  • スクロールした要素の表示
  • フォーム入力や送信結果の通知

CSSだけで実現できる状態変化と、JavaScriptが必要な処理を分けます。動きがなくても重要な文章とリンクへアクセスできる構造を先に作ります。

次の図では、「最初に必要な動きを一覧にする」の仕組みや関係を確認できます。

「最初に必要な動きを一覧にする」の仕組みや関係を示す図
「最初に必要な動きを一覧にする」の仕組みと関係

メニューの開閉状態を管理する

メニューを開いた状態では、移動先が読みやすく、閉じる操作も判断できるようにします。

スマートフォンでJavaScriptのメニューを開いた表示
スマートフォンでJavaScriptのメニューを開いた表示
const menuButton = document.querySelector(".menu-button");
const menu = document.querySelector(".global-nav");

if (menuButton && menu) {
 menuButton.addEventListener("click", () => {
  const isOpen = menuButton.getAttribute("aria-expanded") === "true";

  menuButton.setAttribute("aria-expanded", String(!isOpen));
  menu.classList.toggle("is-open", !isOpen);
 });
}

見た目のクラスだけでなく、ボタンのaria-expandedも更新します。開いている間のフォーカス移動やEscapeキーで閉じる必要がある構成かも確認します。

表示領域へ入ったことを検知する

スクロール演出は、内容を隠したままにせず短い変化で完成状態へ移します。

スクロールアニメーションを適用する前と表示後のカード比較
スクロールアニメーションを適用する前と表示後のカード比較

Intersection Observerを使うと、対象要素が画面へ入ったときに処理を実行できます。すべてのスクロール位置を常時計算する処理を自作せず、ブラウザの仕組みを使います。

const targets = document.querySelectorAll(".js-reveal");

const observer = new IntersectionObserver((entries) => {
 entries.forEach((entry) => {
  if (!entry.isIntersecting) return;

  entry.target.classList.add("is-visible");
  observer.unobserve(entry.target);
 });
}, { threshold: 0.2 });

targets.forEach((target) => observer.observe(target));

動きを減らす設定へ対応する

ユーザーが端末で動きを減らす設定を有効にしている場合は、大きな移動や長いアニメーションを止めます。

次の画像は、「動きを減らす設定へ対応する」で扱うコードや構成をブラウザで表示した結果です。

「動きを減らす設定へ対応する」で扱うコードや構成の表示結果
「動きを減らす設定へ対応する」で扱うコードや構成をブラウザで表示した結果
@media (prefers-reduced-motion: reduce) {
 *,
 *::before,
 *::after {
  scroll-behavior: auto !important;
  animation-duration: .01ms !important;
  animation-iteration-count: 1 !important;
  transition-duration: .01ms !important;
 }
}

繰り返し操作して確認する

次の図では、「繰り返し操作して確認する」の仕組みや関係を確認できます。

「繰り返し操作して確認する」の仕組みや関係を示す図
「繰り返し操作して確認する」の仕組みと関係
  1. マウス、キーボード、タッチで操作する
  2. 開く・閉じるを複数回繰り返す
  3. 画面幅を変更した後も状態が破綻しないか確認する
  4. JavaScriptを無効にして主要内容を確認する
  5. Consoleにエラーがないか確認する

CHECK POINT

完了条件