ページ遷移後も開閉状態を記憶するドロワーメニューの作り方【HTML/CSS/JavaScript・サンプルコード付き】

ドロワーメニュー

ページ遷移後も開閉状態を記憶するドロワーメニューの作り方

ページ遷移後も開閉状態を記憶するドロワーメニューの作り方を紹介します。ドロワーメニューを開いた状態で別のページへ移動した場合でも、移動先で開いた状態を復元できるサンプルです。閉じた状態も保存されるため、利用者が最後に操作した状態を維持できます。

このサンプルはHTML・CSS・JavaScriptだけで動作し、開閉状態の保存にはブラウザのlocalStorageを使用します。メニューを開いたときは開いた状態を保存し、閉じるボタンや背景部分をクリックしたときは閉じた状態へ更新します。ページを読み込む際に保存済みの値を確認し、ドロワーメニューの表示状態を自動的に復元します。

複数ページで共通のナビゲーションを使用するコーポレートサイト、会員サイト、管理画面などに利用できます。ページを移動するたびにメニューを開き直す必要がなくなり、連続してメニューを利用する場合の操作回数を減らせます。メニュー項目、配色、横幅、背景の暗さ、開閉速度はコード内で変更できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

開閉状態を記憶するドロワーメニュー

ドロワーメニューを開いたままページ遷移を再現すると、開いた状態が復元されます。

メニューを開いた状態で別のページへ移動し、元のページへ戻ったときも、保存された開閉状態が復元されます。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>

  <!-- 文字コード -->
  <meta charset="UTF-8">

  <!-- スマートフォン表示対応 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- ページタイトル -->
  <title>ページ遷移後も開閉状態を記憶するドロワーメニュー</title>

  <!-- CSSファイルを読み込み -->
  <link rel="stylesheet" href="style.css">

</head>
<body>

  <!-- ドロワーメニューを開く操作エリア -->
  <main class="remember-drawer-menu-state_wrap">

    <!-- 操作エリアのタイトル -->
    <div class="remember-drawer-menu-state_title">
      開閉状態を記憶するドロワーメニュー
    </div>

    <!-- 操作エリアの説明文 -->
    <p class="remember-drawer-menu-state_text">
      メニューを開いた状態で別のページへ移動すると、移動先でも開いた状態が復元されます。
    </p>

    <!-- ドロワーメニューを開くボタン -->
    <button
      class="remember-drawer-menu-state_open"
      type="button"
      data-remember-drawer-menu-state-open
      aria-expanded="false">
      メニューを開く
    </button>

  </main>

  <!-- ドロワーメニュー表示中の背景 -->
  <div
    class="remember-drawer-menu-state_overlay"
    data-remember-drawer-menu-state-overlay>
  </div>

  <!-- ドロワーメニュー本体 -->
  <aside
    class="remember-drawer-menu-state_drawer"
    data-remember-drawer-menu-state-drawer
    aria-hidden="true">

    <!-- ドロワーメニュー上部 -->
    <div class="remember-drawer-menu-state_header">

      <!-- ドロワーメニューのタイトル -->
      <div class="remember-drawer-menu-state_heading">
        メニュー
      </div>

      <!-- ドロワーメニューを閉じるボタン -->
      <button
        class="remember-drawer-menu-state_close"
        type="button"
        data-remember-drawer-menu-state-close
        aria-label="ドロワーメニューを閉じる">
      </button>

    </div>

    <!-- ページ遷移用ナビゲーション -->
    <nav
      class="remember-drawer-menu-state_nav"
      aria-label="メインメニュー">

      <!-- ホームへ移動するリンク -->
      <a
        class="remember-drawer-menu-state_link"
        href="index.html?page=home">
        ホーム
      </a>

      <!-- サービスページへ移動するリンク -->
      <a
        class="remember-drawer-menu-state_link"
        href="index.html?page=service">
        サービス
      </a>

      <!-- お知らせページへ移動するリンク -->
      <a
        class="remember-drawer-menu-state_link"
        href="index.html?page=news">
        お知らせ
      </a>

      <!-- お問い合わせページへ移動するリンク -->
      <a
        class="remember-drawer-menu-state_link"
        href="index.html?page=contact">
        お問い合わせ
      </a>

    </nav>

  </aside>

  <!-- JavaScriptファイルを読み込み -->
  <script src="script.js"></script>

</body>
</html>

ファイル構成と設置方法

このサンプルは、HTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではドロワーメニュー本体、開閉ボタン、背景オーバーレイ、ページ遷移用のリンクを配置しています。CSSでは画面左側から表示するレイアウトや開閉アニメーションを設定し、JavaScriptではlocalStorageを使って開閉状態を保存・復元します。

ドロワーメニューを開くと、開いた状態がブラウザへ保存されます。そのままメニュー内のリンクから別のページへ移動した場合や、元のページへ戻った場合でも、保存された状態を読み込んでドロワーメニューを開いた状態へ戻します。閉じるボタンまたは背景部分をクリックすると、閉じた状態が保存されます。

メニュー項目やリンク先はindex.html、ドロワーメニューの横幅や配色、余白、開閉速度はstyle.cssで変更できます。保存に使用する名前や開閉状態の処理はscript.jsで管理しています。

sample/
├── index.html
├── style.css
└── script.js

各ファイルの役割
index.html
操作エリア、メニューを開くボタン、背景オーバーレイ、ドロワーメニュー、閉じるボタン、ページ遷移用のナビゲーションリンクを配置しています。タイトル、説明文、メニュー名、リンク先を編集すると表示内容や移動先が変わります。

style.css
操作エリア、開くボタン、背景オーバーレイ、ドロワーメニュー、閉じるボタン、ナビゲーションリンクのデザインを設定しています。横幅、背景色、文字色、余白、角丸、影、開閉アニメーションの速度を変更できます。

script.js
ドロワーメニューの開閉処理とlocalStorageへの状態保存を行います。ページ読み込み時に保存されている値を確認し、前回開いていた場合はドロワーメニューを自動的に開きます。

設置方法・使い方
sampleフォルダ内へindex.html、style.css、script.jsを配置します。3ファイルは同じ階層へ保存してください。

sample/index.htmlをブラウザで開き、「メニューを開く」をクリックします。ドロワーメニューが開いた状態でメニュー内のリンクから別のページへ移動し、元のページへ戻ると、保存されている開閉状態が復元されます。

閉じるボタンまたは背景部分をクリックするとドロワーメニューが閉じ、閉じた状態がlocalStorageへ保存されます。

カスタマイズできる内容
index.htmlでは、操作エリアのタイトル、説明文、ドロワーメニューのタイトル、メニュー項目、リンク先を変更できます。

style.cssでは、開くボタンの色、ドロワーメニューの横幅、背景色、文字色、余白、角丸、影、オーバーレイの暗さ、開閉速度を変更できます。

script.jsでは、localStorageへ保存するキー名、保存する開閉状態の値、開閉対象となる要素を変更できます。

数値調整
style.css
width:320px;
ドロワーメニューの横幅です。値を大きくすると幅が広くなり、小さくすると狭くなります。

style.css
max-width:85%;
画面幅に対するドロワーメニューの最大幅です。小さい画面では画面幅の85%以内へ収まります。

style.css
transition:transform .35s ease;
0.35秒でドロワーメニューが開閉します。値を大きくするとゆっくり、小さくすると速く動きます。

style.css
opacity .3s
0.3秒で背景オーバーレイが表示・非表示になります。値を変更するとフェード速度が変わります。

style.css
background:rgba(15,23,42,.6);
0.6は背景オーバーレイの不透明度です。値を大きくすると暗くなり、小さくすると明るくなります。

レスポンシブ対応
style.cssのwidth:100%、max-width:700px、max-width:85%を使用し、画面幅に合わせて操作エリアとドロワーメニューが縮小されます。

画面幅640px以下ではmedia queryによってページ、操作エリア、開くボタン、ドロワーメニューの余白や横幅を調整しています。スマートフォン・タブレット・PCで利用できます。



コメント