スワイプ・ドラッグで閉じられるドロップダウンメニューの作り方
スワイプ・ドラッグで閉じられるドロップダウンメニューの作り方を紹介します。このサンプルでは、「メニュー」ボタンをクリックするとドロップダウンメニューが表示され、画面上をスワイプまたはドラッグするとメニューが閉じます。スマートフォンでは指でスワイプ、PCではマウスドラッグで操作できるため、さまざまなデバイスで自然な操作感を実現できます。
JavaScriptでは、ドロップダウンメニューを開いた状態でドラッグ開始位置を記録し、一定距離以上移動した場合にメニューを閉じる処理を実装しています。マウス操作とタッチ操作の両方に対応しているため、追加ライブラリを使用せずにスワイプ・ドラッグ操作を実現できます。
メニュー項目やタイトルはHTMLから変更でき、デザインはCSSで自由にカスタマイズできます。ドラッグ判定に使用する移動距離はJavaScriptから簡単に調整できるため、用途に合わせた操作感へ変更することも可能です。レスポンシブ対応なので、スマートフォン・タブレット・PCでそのまま利用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
メニューを開いた状態で、画面上を約50px以上スワイプ・ドラッグすると閉じます。
コードをコピーして使おう!
<!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>
<!-- ドロップダウンメニュー全体 -->
<div class="swipe-close-dropdown-menu_wrap">
<!-- タイトル -->
<div class="swipe-close-dropdown-menu_title">
スワイプ・ドラッグで閉じるドロップダウンメニュー
</div>
<!-- 説明文 -->
<p class="swipe-close-dropdown-menu_text">
メニューを開いたあと、画面上をスワイプ・ドラッグすると閉じます。
</p>
<!-- メニュー配置エリア -->
<div class="swipe-close-dropdown-menu_group">
<!-- ドロップダウンメニューエリア -->
<div class="swipe-close-dropdown-menu_area">
<!-- メニューを開閉するボタン -->
<button
class="swipe-close-dropdown-menu_button"
type="button"
data-swipe-dropdown-button>
メニュー
<span class="swipe-close-dropdown-menu_arrow">
▼
</span>
</button>
<!-- ドロップダウンメニュー -->
<ul
class="swipe-close-dropdown-menu_list"
data-swipe-dropdown-list>
<li>
<a
class="swipe-close-dropdown-menu_link"
href="#">
ホーム
</a>
</li>
<li>
<a
class="swipe-close-dropdown-menu_link"
href="#">
サービス
</a>
</li>
<li>
<a
class="swipe-close-dropdown-menu_link"
href="#">
お問い合わせ
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではドロップダウンメニュー本体を配置し、CSSではレイアウトや配色などのデザインを設定しています。JavaScriptではメニューの開閉と、スワイプ・ドラッグ操作によってメニューを閉じる処理を実装しています。
「メニュー」ボタンをクリックするとドロップダウンメニューが表示されます。メニューが開いている状態で画面上を一定距離以上スワイプまたはドラッグすると、自動でメニューが閉じます。マウス操作とタッチ操作の両方に対応しているため、PCとスマートフォンのどちらでも同じように利用できます。
メニュー項目やタイトルはHTML、デザインはCSS、スワイプ・ドラッグ判定はJavaScriptで管理しています。それぞれの役割をファイルごとに分けているため、初心者でも編集場所が分かりやすく、用途に合わせてカスタマイズしやすい構成になっています。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはドロップダウンメニュー全体を構成するファイルです。タイトル、説明文、「メニュー」ボタンの文字、メニュー項目、リンク先を変更できます。
style.cssは見た目を設定するファイルです。背景色、文字色、ボタンの色、横幅、余白、角丸、影などのデザインを変更できます。
script.jsはメニューの開閉とスワイプ・ドラッグ操作を管理するファイルです。メニューを表示・非表示にする処理と、一定距離以上のスワイプ・ドラッグを検出してメニューを閉じる処理を実装しています。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。「メニュー」をクリックするとドロップダウンメニューが表示され、画面上をスワイプまたはドラッグすると閉じます。
カスタマイズできる内容
index.htmlではタイトル、説明文、「メニュー」ボタンの文字、メニュー項目、リンク先を変更できます。
style.cssではドロップダウンメニューの横幅、背景色、文字色、余白、角丸、影、ボタンの色などを変更できます。
script.jsではスワイプ・ドラッグで閉じる判定距離や、開閉処理などを用途に合わせて変更できます。
数値調整
style.css
max-width:700px;
コンテンツ全体の最大横幅です。値を大きくすると横幅が広くなり、小さくするとコンパクトになります。
padding:32px;
コンテンツ全体の内側余白です。値を変更すると余白の広さが変わります。
max-width:280px;
ドロップダウンメニューの最大横幅です。値を変更するとメニューの横幅が変わります。
min-height:52px;
「メニュー」ボタンの高さです。値を大きくするとボタンが高くなり、小さくすると低くなります。
script.js
const closeDistance=50;
50は50pxを表します。スワイプ・ドラッグでメニューを閉じるために必要な移動距離です。値を大きくすると長く操作しないと閉じなくなり、小さくすると短い操作でも閉じるようになります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssではwidth:100%とmax-width:700pxによって画面幅に応じてレイアウトが調整されます。また、@media (max-width:640px)では内側余白を変更し、小さい画面でも見やすく表示できるようになっています。スマートフォン・タブレット・PCでそのまま利用できます。
コメント