Magnific Popup で色んなモーダルウィンドウを作ってみる

gallery

Magnific Popup は、レスポンシブデザインにも対応しているモーダルウィンドウ用jQueryプラグインです。
IE7+から使えるのも魅力的!

デモページ

ファイルの準備

必要なファイルを読み込む

配布ページからデータをダウンロードして、CSSとJSファイルを読み込みます。
必要なのは dist ディレクトリの中に入っているファイルです。

Magnific Popup

Magnific Popup 配布サイト

<link rel="stylesheet" href="magnific-popup.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="jquery.magnific-popup.min.js"></script>

画像単体で表示させる方法

jQuery

モーダルウィンドウで表示させたい要素のclass名を、jQueryで設定します。ここでは .popup-image としています。

$(function(){
    	$('.popup-image').magnificPopup({
			type: 'image'
	});
});

html

jQueryで指定したクラス名をaタグに付与します。

<a href="../images/modal/01.jpg" class="popup-image">
		<img src="../images/modal/thumb-01.jpg" />
</a>

ギャラリー表示は複数の画像を連続して表示させることが出来ます。

js

ギャラリー表示させる要素の親要素を指定します。ここでは .parent-container です。
次にdelegateでギャラリー表示させる子要素を指定します。ここではa要素です。
5行目以降はギャラリー表示にさせるための指定です。

$(function(){
$('.parent-container').magnificPopup({
	delegate: 'a', 
	type: 'image',
	gallery: { //ギャラリー表示にする
		enabled:true
	}
	});
});

html

jQueryで指定したクラス名を、ギャラリー表示させたい要素の親要素に指定します。

<div class="parent-container">
<a href="../images/modal/01.jpg">
	<img src="../images/modal/thumb-01.jpg" />
</a>
<a href="../images/modal/02.jpg">
	<img src="../images/modal/thumb-02.jpg" />
</a>
<a href="../images/modal/03.jpg">
	<img src="../images/modal/thumb-03.jpg" />
</a>
<a href="../images/modal/04.jpg">
	<img src="../images/modal/thumb-04.jpg" />
</a>
</div>

iframeで表示させる方法

iframeを使って指定したURLや動画などを表示させる方法です。

jQuery

jsでモーダル表示させたい要素のクラス名を設定します。ここでは .popup-iframe です。

$(function(){
	$('.popup-iframe').magnificPopup({
		type: 'iframe',
		disableOn: 500, //ウィンドウ幅が500px以下だったらモーダル表示させずにリンク先へ遷移
		mainClass: 'mfp-fade',
		removalDelay: 200,
		preloader: false,
		fixedContentPos: false
	});
});

html

<a class="popup-iframe" href="https://www.youtube.com/watch?v=C0xc28p4gnE">YouTube動画</a><br />
<a class="popup-iframe" href="/">Webページ</a>

インラインで画像とテキストを表示させる方法

inline

html上に記述してある内容をモーダル表示させる方法です。

js

jQueryでモーダルウィンドウへのリンクとなる要素のclass名を設定します。ここでは .popup-modal としています。
6行目以降は「閉じる」リンクの設定になります。入れなくても影響はありません。

$(function () {
	$('.popup-modal').magnificPopup({
		type: 'inline',
		preloader: false
	});
	//閉じるリンクの設定
	$(document).on('click', '.popup-modal-dismiss', function (e) { 
		e.preventDefault();
		$.magnificPopup.close();
	});
});

html

a要素のhref属性に、モーダルウィンドウで表示させたい内容の親要素を指定します。ここでは #inline-wrap です。
class名mfp-hideは、最初に読み込んだCSSファイルで、エリアごと非表示にしておくためのスタイルが設定されているので付与しておきましょう。

<a class="popup-modal" href="#inline-wrap">インライン情報を表示</a>
<div id="inline-wrap" class="mfp-hide">
	<h1>画像とテキストを表示</h1>
	<div class="image"><img src="../images/modal/01.jpg"></div>
	<p>キャプションを付けたい時なんかに便利です。</p>
	<p class="popup-modal-dismiss"><a href="#">閉じる</a></p>
</div>

Retinaディスプレイ対応

PC用の画像をRetina対応デバイスで表示させると、サイズによってはもっさりしてしまう可能性があります。
この方法では、モーダルウィンドウ用の画像を通常用とRetinaディスプレイ用の2つ用意しておき、デバイスごとに画像を出し分けます。

js

Retinaディスプレイだったら、画像の拡張子の前に「@2x」とついているものを表示するよう設定します。
通常用のファイル名がimage.jpgだったら、image@2x.jpgです。

$(function () {
$('.retina-modal').magnificPopup({
  type: 'image',
  retina: {
    ratio: 2,
    replaceSrc: function(item, ratio) {
      return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
        }
        }
    });
});

html

htmlでは通常用の画像を設定します。

<a href="../images/modal/image.jpg" class="retina-modal">Open</a>

デモページ