コピペで完結!ドロワーメニュー#10【ページ遷移後も開閉状態を記憶】

html/css/js

ページ遷移後も開閉状態を記憶

localStorageを利用し、ユーザーがドロワーメニューを開いた状態のままページを移動しても、次のページで再びメニューを自動的に開くサンプルです。
SPA(単一ページ)でなくても簡単に開閉状態を引き継げます。

コードについて 本記事のコードは AI(ChatGPT)による生成をベースに作成・調整しています。ご利用の環境でテストの上ご使用ください。
免責 本コードの利用に伴う不具合・損害について、当サイトは責任を負いません。自己責任にてご利用ください。

デモ

下の「メニューを開く」ボタンを押してドロワーを開き、そのままページをリロードしてみてください。
localStorageによって、2回目以降の訪問では前回の開閉状態が自動的に復元されます。
初回アクセス時は自動で開かないよう制御されています。

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

/* ===========================================
   ▼ CSS:#drawer-memory-section スコープ推奨
   localStorageで状態保持するドロワー用スタイル
   =========================================== */

/* -----------------------------------------------------
   セクション全体のスタイル設定
   (ドロワーメニュー機能のコンテナとなる)
----------------------------------------------------- */
#drawer-memory-section{
  position:relative; /* 内部の絶対配置要素(overlay/panelなど)の基準とする */
}

/* -----------------------------------------------------
   「メニューを開く」ボタンの基本スタイル
   ----------------------------------------------------- */
#drawer-memory-section .menu-btn{
  background:#0b6bff; /* 明るいブルーで視認性を確保 */
  color:#fff;         /* 背景とのコントラストを強調 */
  border:none;        /* デフォルトのボーダーを削除 */
  border-radius:8px;  /* 柔らかい角丸ボタンにする */
  padding:10px 16px;  /* 押しやすいタップ領域を確保 */
  cursor:pointer;     /* ホバー時にカーソルをポインタ表示 */
}

/* -----------------------------------------------------
   オーバーレイ(背景を半透明で覆うレイヤー)
   初期状態では非表示
----------------------------------------------------- */
#drawer-memory-section .overlay{
  position:fixed;            /* 画面全体を覆う固定配置 */
  inset:0;                   /* top, right, bottom, left をすべて0にして全画面に広げる */
  background:rgba(0,0,0,0.5);/* 背景を半透明の黒で覆い、背後の内容を暗くする */
  opacity:0;                 /* 初期は透明で見えない状態 */
  pointer-events:none;       /* 初期状態ではクリックを通過させる */
  transition:opacity .25s ease; /* フェードイン/アウトを滑らかにする */
}

/* -----------------------------------------------------
   オーバーレイがアクティブな時の状態(表示中)
----------------------------------------------------- */
#drawer-memory-section .overlay.active{
  opacity:1;           /* 不透明度を上げて表示する */
  pointer-events:auto; /* クリックを受け付ける(背景クリックで閉じるため) */
}

/* -----------------------------------------------------
   ドロワーパネル本体
   初期状態では右側の画面外に配置し、アクティブ時にスライドイン
----------------------------------------------------- */
#drawer-memory-section .panel{
  position:fixed;                   /* 画面に固定して常に右端に配置 */
  top:0;                            /* 上端から配置開始 */
  right:0;                          /* 右端に固定 */
  height:100dvh;                    /* ビューポート高いっぱい(モバイル対応) */
  width:min(86vw,340px);            /* 画面幅の86%か340pxの小さい方を採用 */
  background:#fff;                  /* 背景は白で内容を明確に */
  box-shadow:-6px 0 18px rgba(0,0,0,0.2); /* 影を付けて奥行きを演出 */
  transform:translateX(100%);       /* 初期状態では右に押し出して非表示 */
  transition:transform .3s ease;    /* スライドアニメーションを適用 */
  display:flex;                     /* 縦方向に要素を並べるためflexを利用 */
  flex-direction:column;            /* ヘッダーとコンテンツを縦に積む */
}

/* -----------------------------------------------------
   パネルがアクティブ状態になったとき
   transformを0に戻し、画面内にスライドインさせる
----------------------------------------------------- */
#drawer-memory-section .panel.active{
  transform:translateX(0); /* 画面内にスライドして表示 */
}

/* -----------------------------------------------------
   パネルヘッダー部分
   タイトルと「閉じる」ボタンを左右に配置
----------------------------------------------------- */
#drawer-memory-section .panel header{
  display:flex;                       /* 横並び配置 */
  justify-content:space-between;      /* 左右に要素を分ける */
  align-items:center;                 /* 垂直方向中央揃え */
  padding:14px 16px;                  /* 内側に余白をとり、操作しやすく */
  border-bottom:1px solid #e5e7eb;    /* 下線でヘッダーを区切る */
}

/* -----------------------------------------------------
   閉じるボタン(右上の「×」)
   シンプルな見た目でクリック可能に
----------------------------------------------------- */
#drawer-memory-section .close-btn{
  background:none;    /* 背景を消してアイコン的に見せる */
  border:none;        /* 不要なボーダーを削除 */
  font-size:18px;     /* 適度なサイズの「×」を表示 */
  cursor:pointer;     /* ホバー時にポインタ表示 */
}

コメント