スワイプ・ドラッグで閉じられるドロワーメニューの作り方【HTML/CSS/JavaScript・サンプルコード付き】

ドロワーメニュー

スワイプ・ドラッグで閉じられるドロワーメニューの作り方

スワイプ・ドラッグで閉じられるドロワーメニューの作り方を紹介します。このサンプルでは、「メニューを開く」ボタンをクリックすると画面左側からドロワーメニューが表示され、メニュー本体を左方向へ動かすと閉じられます。スマートフォンでは指によるスワイプ、パソコンではマウスによるドラッグで同じ操作を確認できます。

JavaScriptのPointer Eventsを使用しているため、タッチ操作とマウス操作を別々に実装する必要がありません。スワイプまたはドラッグを開始した位置と終了した位置を比較し、左方向へ一定距離以上移動した場合だけドロワーメニューを閉じます。ナビゲーションメニュー、会員サイト、管理画面、ECサイトなど、直感的な操作を取り入れたい画面で利用できます。

メニューのタイトル、説明文、リンク項目、ドロワーメニューの横幅、配色、余白、影、表示速度、閉じる判定に使用する移動距離を変更できます。画面幅640px以下ではドロワーメニューを画面幅いっぱいに表示するため、スマートフォン・タブレット・PCで利用できる構成です。

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

デモ

スワイプ・ドラッグで閉じられるドロワーメニュー

メニューを開いたあと、左方向へスワイプまたはドラッグすると閉じられます。

「メニューを開く」をクリックしたあと、ドロワーメニュー内を左方向へスワイプまたはドラッグすると閉じる動作を確認できます。

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

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

<head>

  <!-- 文字コードをUTF-8に設定 -->
  <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>

  <div class="swipe-drag-close-drawer-menu_container">

    <h1>スワイプ・ドラッグで閉じられるドロワーメニュー</h1>

    <p>
      メニューを開いたあと、左方向へスワイプまたはドラッグすると閉じられます。
    </p>

    <button
      class="swipe-drag-close-drawer-menu_open"
      type="button"
      data-swipe-drag-drawer-open>
      メニューを開く
    </button>

  </div>

  <div
    class="swipe-drag-close-drawer-menu_overlay"
    data-swipe-drag-drawer-overlay
    aria-hidden="true">

    <aside
      class="swipe-drag-close-drawer-menu_drawer"
      data-swipe-drag-drawer
      aria-labelledby="drawer-title">

      <h2
        id="drawer-title"
        class="swipe-drag-close-drawer-menu_title">
        メニュー
      </h2>

      <p class="swipe-drag-close-drawer-menu_text">
        左方向へスワイプまたはドラッグすると閉じます。
      </p>

      <nav class="swipe-drag-close-drawer-menu_nav">
        <a href="#">ホーム</a>
        <a href="#">サービス</a>
        <a href="#">お知らせ</a>
        <a href="#">お問い合わせ</a>
      </nav>

    </aside>

  </div>

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

</body>

</html>

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLで案内エリアとドロワーメニューを配置し、CSSでレイアウトや表示アニメーションを設定、JavaScriptでスワイプ・ドラッグ操作を判定します。

「メニューを開く」をクリックすると画面左側からドロワーメニューが表示されます。表示後にメニュー本体を左方向へ80pxより大きくスワイプまたはドラッグすると閉じます。Pointer Eventsを使用しているため、指とマウスの両方で操作できます。

メニュー名やリンク先、横幅、配色、余白、影、アニメーション時間、閉じる判定距離を変更できます。画面幅640px以下ではドロワーメニューと開くボタンを横幅いっぱいに表示します。

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

各ファイルの役割
index.html
タイトル、説明文、開くボタン、ドロワーメニュー、メニューリンクを配置しています。リンク先は各a要素のhref属性、表示名は開始タグと終了タグの間の文字を編集します。

style.css
案内エリア、ボタン、背景オーバーレイ、ドロワーメニュー、メニューリンク、表示アニメーション、レスポンシブ表示を管理します。横幅、色、余白、角丸、影、表示速度を変更できます。

script.js
開くボタンによる表示、ポインターの開始位置と終了位置の取得、左方向への移動距離の計算、閉じる判定を行います。

設置方法・使い方
sampleフォルダ内へ3ファイルを同じ階層で配置し、sample/index.htmlをブラウザで開きます。「メニューを開く」をクリックしたあと、ドロワーメニューを左方向へスワイプまたはドラッグすると閉じます。

カスタマイズできる内容
index.htmlではタイトル、説明文、ボタン名、メニュー名、リンク先URLを変更できます。style.cssでは背景色、文字色、横幅、余白、角丸、影、背景オーバーレイの暗さ、アニメーション時間を変更できます。script.jsでは閉じる判定に使用する移動距離を変更できます。

数値調整
style.csswidth:340px;はドロワーメニューの横幅、padding:28px;は内側余白、background:rgba(0,0,0,.45);.45は背景オーバーレイの暗さです。transition:transform .3s ease;.3sを大きくすると表示が遅くなり、小さくすると速くなります。script.js80は閉じる判定距離です。値を大きくすると閉じにくくなり、小さくすると少ない移動量で閉じます。

レスポンシブ対応
style.cssではwidth:100%max-width:90%overflow-y:auto@media screen and (max-width:640px)を使用しています。画面幅640px以下では開くボタンとドロワーメニューを横幅いっぱいに表示するため、スマートフォン・タブレット・PCで利用できます。



コメント