Fancybox v5でモーダルウインドウを作る方法
Contents
Fancybox v5でモーダルウインドウを作る方法
今回は、Facybox v5のタイプ「inline」や「iframe」を利用して、モーダルウインドウを実装してみます。
サンプル
インラインフレーム1 インラインフレーム1(data-preload=false) インラインフレーム2(幅/高さカスタム) PDFファイル
HTMLコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Fancybox Gallery demo(1)</title>
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js"></script>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css"
/>
</head>
<body>
<p>
<!-- Dialog Contents -->
<div id="dialog-content1" style="display:none;max-width:500px;">
<h2>ダイアログ</h2>
<p>
<input type="text" value="" />
</p>
<p>
タブキーを押しても、フォーカスがダイアログにあたり続けます。
</p>
<p>
ダイアログを閉じるには、[ESC]キーを押す、オーバーレイをクリックする、または、閉じるの×ボタンを教えてください
</p>
<p className="margin-bottom--none">
ダイアログが閉じられると、モーダルダイアログを開くためのエレメントにフォーカスが戻ります。
</p>
</div>
<!-- Dialog Trigger -->
<button data-fancybox="button" data-src="#dialog-content1" data-type="inline">ダイアログを開く(inline)</button>
<button data-fancybox="button" data-src="#dialog-content1" data-type="clone">ダイアログを開く(clone)</button>
</p>
<script>
Fancybox.bind('[data-fancybox="button"]', {
// Custom options for all galleries
});
</script>
<p>
<!-- Dialog Contents -->
<div id="dialog-content2" style="display:none;max-width:500px;">
<h2>ダイアログ(Javascript)</h2>
<p>
<input type="text" value="" />
</p>
<p>
Javascriptで実装すれば「閉じる」ボタンも実装できます。
</p>
<p className="margin-bottom--none">
type「clone」に設定すると、対象オブジェクトをコピーしてダイアログを表示します。
</p>
<p><button onclick="closeDialog();" style="float: right;">閉じる</button></p>
</div>
<!-- Dialog Trigger -->
<button onclick="openDialogInline();">ダイアログを開く(inline)</button>
<button onclick="openDialogClone();">ダイアログを開く(clone)</button>
</p>
<p>
<a href="/demo/fancydaialog1.html" data-fancybox="iframe" data-type="iframe">
インラインフレーム1
</a>
<a
href="/demo/fancydaialog2.html"
data-fancybox="iframe"
data-type="iframe"
data-preload="false"
>
インラインフレーム1(data-preload=false)
</a>
<a
href="/demo/fancydaialog1.html"
data-fancybox="iframe"
data-type="iframe"
data-width="300"
data-height="400"
>
インラインフレーム2(幅/高さカスタム)
</a>
<a
href="data:text/html,<meta charset='utf-8' /><h2>サンプルHTML</2><p>サンプル内容</p>"
data-fancybox="iframe"
data-type="iframe"
>
ダイナミック インラインフレーム内容
</a>
<a data-fancybox="iframe" data-type="pdf" href="/demo/document.pdf">
PDFファイル
</a>
</p>
<script type="text/javascript">
Fancybox.bind('[data-fancybox="iframe"]', {
l10n: {
CLOSE: "閉じる",
NEXT: "次",
PREV: "前",
}
});
var dialog;
function openDialogInline() {
dialog = Fancybox.show([{ src: "#dialog-content2", type: "inline" }]);
}
function openDialogClone() {
dialog = Fancybox.show([{ src: "#dialog-content2", type: "clone" }]);
}
function closeDialog() {
dialog.close();
}
</script>
</body>
</html>
デモ
実装方法
ライブラリ読み込み
まず、Fancyboxのライブラリを読み込みます。
CSSファイルインクルード
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css"
/>
JSファイルインクルード
次にJSファイルを読み込んでください。
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js"></script>
インラインでダイアログ生成
まずダイアログ領域を生成し、デフォルトで非表示にします。
<div id="dialog-content1" style="display:none;max-width:500px;">
...
</div>
次に、ダイアログの呼び出しボタンなどを設定します。
<button data-fancybox="button" data-src="#dialog-content1" data-type="inline">ダイアログを開く(inline)</button>
<button data-fancybox="button" data-src="#dialog-content1" data-type="clone">ダイアログを開く(clone)</button>
最後にボタンにFancyboxを初期化します。
<script>
Fancybox.bind('[data-fancybox="button"]', {
// Custom options for all galleries
});
</script>
data-type「inline」と「clone」とは?
data-type属性には「inline」または「clone」を指定できます。
cloneを指定すると、毎回オブジェクトをコピーし、生成しなおすので、テキストボックスなどの入力値は初期化されます。
inlineの場合は、対象オブジェクトを再表示するだけなので、前回入力値などは保存されたまま、再表示されます。
avascriptでダイアログ生成
HTMLマークアップ
まずダイアログ領域を生成し、デフォルトで非表示にします。
<div id="dialog-content2" style="display:none;max-width:500px;">
...
</div>
次にダイアログ表示のためのボタンやリンクを設定します。
<button onclick="openDialogInline();">ダイアログを開く(inline)</button>
ダイアログ表示
<script type="text/javascript">
var dialog;
function openDialogInline() {
dialog = Fancybox.show([{ src: "#dialog-content2", type: "inline" }]);
}
</script>
ボタンやリンクを押すことでJavascript関数を呼び出します。
Javascript関数では、Fancyboxの「show()」メソッドを呼び出すことでダイアログが表示されます。
オプション「src」にはダイアログ領域のIDを指定してください。
ダイアログを閉じる
Javascriptでダイアログを表示させた場合、「閉じる」関数を実装すれば、閉じる処理を実装することもできます。
<script type="text/javascript">
var dialog;
function openDialogInline() {
dialog = Fancybox.show([{ src: "#dialog-content2", type: "inline" }]);
}
function closeDialog() {
dialog.close();
}
</script>
show()メソッドの戻りオブジェクトで「close()」メソッドを呼び出すと、ダイアログを閉じることができます。
インラインフレームでダイアログ生成
ダイアログに別ページやPDFファイルを表示させることができます。
HTMLマークアップ
リンクの場合はまず、属性「href」に表示させたいページのURLを設定してください。
そして、属性「data-type」には『iframe』を設定すれば、ダイアログに別ページを表示させることができます。
<a href="/demo/fancydaialog1.html" data-fancybox="iframe" data-type="iframe">
インラインフレーム1
</a>
当然、最後に、Fancyboxを初期化する必要はあります。
<script type="text/javascript">
Fancybox.bind('[data-fancybox="iframe"]', {
l10n: {
CLOSE: "閉じる",
NEXT: "次",
PREV: "前",
}
});
</script>
ご参考
関連ページ
- Fancybox v5でギャラリーを作る方法【前編】
- Fancybox v5でギャラリーを作る方法【後編】
- Bootstrapでモーダル(Modal)を作る方法
- jQuery UIでModal Dialog(モーダルダイアログ)を表示する方法
- 「Nifty Modal Window Effects」を利用してモーダルウインドウを実装する方法
- モーダル(Modal)を自作する方法
- 軽量jQuery Lightboxプラグイン「Featherlight」を使ってダイアログを表示する方法