既存のプラグインを使用する代わりに、jQuery を使用して独自のモーダル ボックスを作成しますか? ...OK、プレイしましょう (すでに指摘されているように、ポップアップの使用はユーザーフレンドリーなソリューションではありません):
チェックリスト :
- the trigger
- the shadow layer
- the modal box size and position
- add content to modal and display it along the shadow
1) トリガーは、モーダル内のコンテンツを開くための単純な html リンクです。
<a href="http://jsfiddle.net" class="myModal" data-width="400" data-height="300">open url</a>
... モーダル ビアのサイズdata-width
とdata-height
(HTML5) 属性を渡します。
2)shadow
レイヤーは、トリガーの後に本文に追加する html 構造です。js 変数に構造を設定できます
var shadow = "<div class='shadow'></div>";
3) 前述したように、モーダルのサイズはdata-*
リンク内のいくつかの属性によって設定されます。いくつかの計算を行う必要があります
var modalWidth = $(this).data("width");
var modalHeight = $(this).data("height");
var modalX = (($(window).innerWidth()) - modalWidth) / 2; // left position
var modalY = (($(window).innerHeight()) - modalHeight) / 2; // top position
注:は、後でメソッド内で取得する$(this)
トリガー セレクターです。ところで、メソッドにはjQuery v1.7+が必要です.myModal
.on("click")
.on()
4) 次に、モーダルの html 構造を作成し、 content を渡す必要がありますhref
。関数を作成します
function modal(url) {
return '<div id="modal"><a id="closeModal" title="close" href="javascript:;"><img src="http://findicons.com/files/icons/2212/carpelinx/64/fileclose.png" alt="close" /></a><iframe src="' + url + '"></iframe></div>';
}
...ご覧のとおり、私たちの構造には、モーダルとシャドウレイヤーを削除するための閉じるボタンが含まれています。この関数は、( ) が呼び出されたときに、タグの属性url
を設定できるパラメーターも取得します。src
iframe
注: 外部 URL を開くにはタグを使用する必要がありますが、iframe を使用する場合iframe
は常に同じオリジン ポリシーとその他のセキュリティ制限を考慮する必要があります。
ここで、トリガーをクリックした後にすべてのイベントをまとめて.myModal
、ボディにシャドウとモーダル ボックスの両方を追加し、閉じるボタンをクリックしたときにそれらを削除する必要があります。
$(".myModal").on("click", function(e) {
e.preventDefault();
// get size and position
modalWidth = $(this).data("width");
modalHeight = $(this).data("height");
modalX = (($(window).innerWidth()) - modalWidth) / 2;
modalY = (($(window).innerHeight()) - modalHeight) / 2;
// append shadow layer
$(shadow).prependTo("body").css({
"opacity": 0.7
});
// append modal (call modal() and pass url)
$(modal(this.href)).appendTo("body").css({
"top": modalY,
"left": modalX,
"width": modalWidth,
"height": modalHeight
});
// close and remove
$("#closeModal").on("click", function() {
$("#modal, .shadow").remove();
});
}); // on
STYLE : もちろん、モーダル要素を適切に機能させるには、いくつかの基本的な CSS スタイルが必要です。
.shadow {width: 100%; height: 100%; position: fixed; background-color: #444; top: 0; left:0; z-index: 400}
#modal {z-index: 500; position: absolute; background: #fff; top: 50px;}
#modal iframe {width: 100%; height: 100%}
#closeModal {position: absolute; top: -15px; right: -15px; font-size: 0.8em; }
#closeModal img {width: 30px; height: 30px;}
*デモを見る*
ボーナス:キーkeyup
を使用してイベントをバインドしてモーダルを閉じることもできますescape
$(document).keyup(function(event) {
if (event.keyCode === 27) {
$("#modal, .shadow").remove();
}
}); //keyup
最後の注意: コードは多くの改善と最適化の対象となりますが、多くのライトボックスが行うことの基本的なレイアウトです。私の最後の推奨事項:より高度な機能にはfancyboxを使用してください。