フロントの人の雑多メモ

Magnific PopupでaタグのHTML属性をモーダルに引き継ぐ方法

Magnific PopupでaタグのHTML属性をモーダルに引き継ぐ方法

jQueryのプラグイン「Magnific Popup」で、aタグに付けたHTML属性をモーダルに渡す方法をご紹介します。

目次

やりたいこと

モーダルとなる前のaタグにHTML属性「data-bgcolor」属性を付与 (値は#badc58)

<a href="img.jpg" class="popup-image" data-bgcolor="#badc58"><img src="img.jpg"></a>

モーダルを開いた先で、data-bgcolor属性の値を使用して、オーバーレイの色を変えたい!

画像ごとに、モーダルの背景色を変えたい!

普通にやると、モーダルとなる前の要素のHTML属性は普通に失われるので、ひと工夫必要です。

およそこのようなHTMLでモーダル出力される

<div class="mfp-bg"></div>
<div class="mfp-wrap">
	<div class="mfp-container">
		<div class="mfp-content">
			<div class="mfp-figure">
				<img class="mfp-img" src="img.jpg">
			</div>
		</div>
	</div>
</div>

オプションでできた

Magnific Popupを実行する際のオプションを次のようにすることで、
モーダルとなる前のaタグを取得することができました。

$(".popup-image").magnificPopup({
	type: "image",
	callbacks : {
		change: function() {
			//モーダル前のaタグを取得
			let a = $(this.currItem.el[0]);
		},
	}
});

やりたかったところまで書くとこんな感じ。

$(".popup-image").magnificPopup({
	type: "image",
	callbacks : {
		change: function() {
			//背景色を変更
			//モーダル前のaタグを取得
			let a = $(this.currItem.el[0]);
			//aタグのHTML属性を取得
			let bgcolor = a.attr("data-bgcolor");
			//モーダルのオーバーレイにセットするカラーを作成
			let setcolor = "";
			if(bgcolor && bgcolor.match(/^\#[A-Fa-f0-9]{6}$|^\#[A-Fa-f0-9]{3}$/)){
				setcolor = bgcolor;
			}
			//DOM生成されるのを待つために少し遅延を入れて
			setTimeout(function(){
				//オーバーレイにbackground-colorをセット
				$(".mfp-bg").css("background-color", setcolor);
			}, 10);
		},
	}
});

Magnific Popupの要素 (.mfp-bg や .mfp-wrap など) をいじりたい場合、少し遅延を入れてあげたほうがいいかもしれません。

このオプションは、ギャラリーモードでもそのまま使えます。

$(".gallery-container").magnificPopup({
	delegate: "a", 
	type: "image",
	gallery: {
		enabled:true
	},
	callbacks : {
		change: function() {
			//背景色を変更
			//モーダル前のaタグを取得
			let a = $(this.currItem.el[0]);
			//aタグのHTML属性を取得
			let bgcolor = a.attr("data-bgcolor");
			//モーダルのオーバーレイにセットするカラーを作成
			let setcolor = "";
			if(bgcolor && bgcolor.match(/^\#[A-Fa-f0-9]{6}$|^\#[A-Fa-f0-9]{3}$/)){
				setcolor = bgcolor;
			}
			//DOM生成されるのを待つために少し遅延を入れて
			setTimeout(function(){
				//オーバーレイにbackground-colorをセット
				$(".mfp-bg").css("background-color", setcolor);
			}, 10);
		},
	}
});

サンプル

コメント

内容を確認の上、個人情報などは省いて掲載させていただきます。

お名前・メールアドレスも入力する

メールで返信がほしい場合に入力してください。

頂いた個人情報は開示しません。返信のためだけに利用いたします。

直接送信されます。確認の上、「送信」してください。

お役に立てましたら応援をお待ちしております!
頂いた応援は子育てに活用させていただきます。

OFUSEで応援を送る


または以下のボタンからなにか買って応援
(リンク先の商品を買わなくても大丈夫です。)

Amazon

楽天市場

Yahoo!ショッピング

PR

Amazonのアソシエイトとして「けん」は適格販売により収入を得ています。

シェア

Twitterでシェア Facebookでシェア LINEでシェア はてなブックマークでシェア