Webサイトを製作する上で、割とよく実装することになるモーダルウィンドウですが、実際に一からコーディングするのは何気に面倒だったりもします。
そこで今回は、軽量で使いやすいJavaScriptライブラリ「Micromodal.js」を使用して、簡単にモーダルを実装する方法を紹介します。
「Micromodal.js」を使用すれば、簡単にモーダルを実装できるだけでなく、様々なオプションが用意されているため、サイトに合わせて自分好みの仕様に調整することも可能です。
また、Micromodal.jsは、jQueryを使用しておらず、JavaScriptによる軽量なモーダルライブラリで、約2kBしかありません。シンプルで、モーダル(ポップアップ)ウィンドウを表示するための基本的な機能を提供します。
Micromodal.jsの読み込み
npm
npm install micromodal --save
npmでインストールを行う場合は、上記コマンドを実行してください。
npmがよくわからない方は次のCDNを利用する方法で読み込みましょう。
CDN
<script src="https://cdnjs.cloudflare.com/ajax/libs/micromodal/0.4.10/micromodal.min.js" integrity="sha512-qcwcAul7d7yUcoz3MmQABiaGDa+gVkaDWgZX6wEd/z3I6z62nQCDW3EqioQG+O+QlGCpxmJLdH5snh4IaDPiPA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
CDNを利用してMicromodal.jsを読み込みます。
よくわからない方は上記のタグを<head>~</head>内か、bodyの閉じタグ</body>の前に設置しておけばOKです。
実装方法
<div id="modal-1" aria-hidden="true">
<div tabindex="-1" data-micromodal-close>
<div role="dialog" aria-modal="true">
<header>
<h2>モーダルのタイトル</h2>
<button aria-label="Close modal" data-micromodal-close></button>
</header>
<main>
モーダルに表示したい内容を記載
</main>
<footer>
<button>Save</button>
<button data-micromodal-close>Close</button>
</footer>
</div>
</div>
</div>
まずはbodyタグ内にHTMLでモーダルを定義します。data-micromodal-close属性を持つ要素をクリックすると、モーダルが閉じます。この属性はモーダル内の閉じるボタンやモーダルの背景オーバーレイに適用できます。
<script>
MicroModal.init();
MicroModal.show('modal-1'); // modal id
</script>
次に、Micromodalを初期化し、モーダルを表示します。
上記タグを<head>~</head>内か、bodyの閉じタグ</body>の前に設置してください。
注意点としては、MicroModal.jsのスクリプトが完全に読み込まれた後に、上記のモーダルを初期化や表示するためのコードを実行する必要があります。上記のコードは必ず読み込み用タグより後ろに設置しましょう。
基本的な使い方としてはこれだけでOKです。このように、Micromodalを利用すると簡単にモーダルを実装することができます。
サンプル
<!DOCTYPE html>
<html>
<head>
<!-- 他のmetaタグやlinkタグなど -->
<title>Your Website</title>
</head>
<body>
<!-- あなたのコンテンツ -->
<!-- モーダルのマークアップ -->
<div id="modal-1" aria-hidden="true">
<div tabindex="-1" data-micromodal-close>
<div role="dialog" aria-modal="true">
<header>
<h2>モーダルのタイトル</h2>
<button aria-label="Close modal" data-micromodal-close></button>
</header>
<main>
モーダルに表示したい内容を記載
</main>
<footer>
<button>Save</button>
<button data-micromodal-close>Close</button>
</footer>
</div>
</div>
</div>
<!-- Micromodal.jsの読み込み -->
<script src="path/to/micromodal.min.js"></script>
<!-- Micromodal.jsを使用したスクリプト -->
<script>
MicroModal.init();
MicroModal.show('modal-1'); // modal id
</script>
</body>
</html>
オプション
MicroModal.jsは様々なオプションを提供しており、モーダルの挙動をカスタマイズできます。以下に、いくつかの主なオプションを紹介します。
awaitCloseAnimation: モーダルの閉じるアニメーションが終了するのを待つかどうかを制御します。trueに設定すると、data-micromodal-close属性を持つ要素がクリックされた時、またはMicroModal.closeが呼び出された時に、閉じるアニメーションが完全に終了してからモーダルが閉じます。デフォルトはfalseです。
disableScroll: モーダルが開いている間、背景のスクロールを無効にするかどうかを制御します。trueに設定すると、モーダルが開いている間、ユーザーは背景をスクロールできなくなります。デフォルトはfalseです。
disableFocus: モーダルが開いている間、モーダル外の要素へのフォーカスを無効にするかどうかを制御します。trueに設定すると、モーダルが開いている間、ユーザーはモーダル外の要素にフォーズを移すことはできません。デフォルトはfalseです。
awaitOpenAnimation: モーダルの開くアニメーションが終了するのを待つかどうかを制御します。trueに設定すると、モーダルが開くアニメーションが完全に終了してからモーダルが開きます。デフォルトはfalseです。
onShow: モーダルが表示された時に呼び出されるコールバック関数です。
onClose: モーダルが閉じられた時に呼び出されるコールバック関数です。
これらのオプションを利用するときは、MicroModal.showまたはMicroModal.initメソッドの第二引数としてオブジェクト形式で指定します。
MicroModal.show('modal-id', {
awaitCloseAnimation: true,
onShow: function(modal){
console.log("モーダルが開きました");
},
onClose: function(modal){
console.log("モーダルが閉じました");
}
});
上記のオプションの他にも、MicroModal.jsはモーダルの表示・非表示に関する詳細な制御や、カスタムアニメーションの実装など、様々なカスタマイズが可能です。
例えば、以下のようなオプションも提供されています。
openTrigger: モーダルを開くトリガーとなるカスタムデータ属性を設定します。デフォルトは data-micromodal-trigger です。
closeTrigger: モーダルを閉じるトリガーとなるカスタムデータ属性を設定します。デフォルトは data-micromodal-close です。
これらのオプションを使用して、MicroModalの挙動を自由にカスタマイズすることができます。例えば、以下のように使用することができます。
MicroModal.init({
openTrigger: 'data-custom-open', // モーダルを開くカスタムデータ属性
closeTrigger: 'data-custom-close', // モーダルを閉じるカスタムデータ属性
onShow: (modal) => console.log(`${modal.id} is shown`), // モーダルが表示された時に呼び出されるコールバック関数
onClose: (modal) => console.log(`${modal.id} is hidden`), // モーダルが閉じられた時に呼び出されるコールバック関数
disableScroll: true, // モーダルが開いている間、背景のスクロールを無効にする
disableFocus: false, // モーダルが開いている間、モーダル外の要素へのフォーカスを無効にする
awaitOpenAnimation: false, // モーダルの開くアニメーションが終了するのを待つかどうか
awaitCloseAnimation: true, // モーダルの閉じるアニメーションが終了するのを待つかどうか
});
これらのオプションを駆使することで、MicroModal.jsを使ったモーダルの挙動を自分のニーズに合わせて細かく調整することが可能です。
まとめ
Web開発において、情報を効果的に伝達するためのツールとしてモーダルウィンドウは広く用いられています。しかし、モーダルウィンドウの作成と管理は、時として複雑で困難な作業になります。
そこで、MicroModal.jsが役立ちます。この軽量で使いやすいJavaScriptライブラリを使用することで、手軽にモーダルウィンドウを作成し、その挙動を簡単にカスタマイズすることが可能です。
モーダルが開閉するトリガー、アニメーションの有無、スクロールやフォーカスの制御、そしてモーダルの表示や非表示時のコールバック関数など、様々な設定を自由に行うことができます。
これらをうまく駆使し、少ない手間で効果的な機能を実装しましょう。