モーダルウィンドウについての質問です。
ボタンを押したらモダールウィンドウで画像が開くという実装を、ギャラリーのように複数行いたいのですが、スマホとパソコンで表示する画像を変えたいです。
表示自体はパソコンとスマホどちらもうまくできるのですが、スマホでモダールを閉じるボタンを押すと、一旦消えるのに、また画像だけが表示されてしまいます。
どのようにしたらスマホでも画像が消えるか、お力添えをいただきたく存じます。
https://syncer.jp/jquery-modal-window
のサイトを参考に作りました。
ーモーダルを開く方のhtml- <div class="select-box-item mr pc"> <img src="image/tokyo-kenkyo.jpg" alt=""> <h3 class="story-place">Tokyo Kenkyo<span>カフェ</span></h3> <p class="select-thin">3フロアから成るおしゃれカフェで、<br> 日替わりでほっこり味わう和&洋モーニング</p> <a class="modal-syncer button-link readmore" data-target="modal-content-01">READ MORE<span class="arrow"></span></a> </div> <div class="select-box-item mr tab"> <img src="image/tokyo-kenkyo.jpg" alt=""> <h3 class="story-place">Tokyo Kenkyo<span>カフェ</span></h3> <p class="select-thin">3フロアから成るおしゃれカフェで、<br> 日替わりでほっこり味わう和&洋モーニング</p> <a class="modal-syncer button-link readmore" data-target="modal-content-01-sp">READ MORE<span class="arrow"></span></a> </div> ―開いたモーダルの中身のhtml- <div id="modal-content-01" class="modal-content pc"> <div class="modal-content-inner"> <img src="image/pc_run&walk_Tokyo.jpg" alt=""> <div class="button-link-x"> <a id="modal-close" class="button-link button-link-x"><i class="fas fa-times-circle"></i></a> </div> </div> </div> <div id="modal-content-01-sp" class="modal-content tab"> <div class="modal-content-inner"> <img src="image/sp_run&walk_Tokyo.jpg" alt=""> <div class="button-link-x"> <a id="modal-close" class="button-link button-link-x"><i class="fas fa-times-circle"></i></a> </div> </div> </div> ーjs- //モーダルウィンドウ $(function(){ //グローバル変数 var nowModalSyncer = null ; //現在開かれているモーダルコンテンツ var modalClassSyncer = "modal-syncer" ; //モーダルを開くリンクに付けるクラス名 //モーダルのリンクを取得する var modals = document.getElementsByClassName( modalClassSyncer ) ; //モーダルウィンドウを出現させるクリックイベント for(var i=0,l=modals.length; l>i; i++){ //全てのリンクにタッチイベントを設定する modals[i].onclick = function(){ //ボタンからフォーカスを外す this.blur() ; //ターゲットとなるコンテンツを確認 var target = this.getAttribute( "data-target" ) ; //ターゲットが存在しなければ終了 if( typeof( target )=="undefined" || !target || target==null ){ return false ; } //コンテンツとなる要素を取得 nowModalSyncer = document.getElementById( target ) ; //ターゲットが存在しなければ終了 if( nowModalSyncer == null ){ return false ; } //キーボード操作などにより、オーバーレイが多重起動するのを防止する if( $( "#modal-overlay" )[0] ) return false ; //新しくモーダルウィンドウを起動しない //if($("#modal-overlay")[0]) $("#modal-overlay").remove() ; //現在のモーダルウィンドウを削除して新しく起動する //オーバーレイを出現させる $( "body" ).append( '<div id="modal-overlay"></div>' ) ; $( "#modal-overlay" ).fadeIn( "fast" ) ; //コンテンツをセンタリングする centeringModalSyncer() ; //コンテンツをフェードインする $( nowModalSyncer ).fadeIn( "slow" ) ; //[#modal-overlay]、または[#modal-close]をクリックしたら… $( "#modal-overlay,#modal-close" ).unbind().click( function() { //[#modal-content]と[#modal-overlay]をフェードアウトした後に… $( "#" + target + ",#modal-overlay" ).fadeOut( "slow" , function() { //[#modal-overlay]を削除する $( '#modal-overlay' ).remove() ; } ) ; //現在のコンテンツ情報を削除 nowModalSyncer = null ; } ) ; } } //リサイズされたら、センタリングをする関数[centeringModalSyncer()]を実行する $( window ).resize( centeringModalSyncer ) ; //センタリングを実行する関数 function centeringModalSyncer() { //モーダルウィンドウが開いてなければ終了 if( nowModalSyncer == null ) return false ; //画面(ウィンドウ)の幅、高さを取得 var w = $( window ).width() ; var h = $( window ).height() ; //コンテンツ(#modal-content)の幅、高さを取得 // jQueryのバージョンによっては、引数[{margin:true}]を指定した時、不具合を起こします。 // var cw = $( nowModalSyncer ).outerWidth( {margin:true} ) ; // var ch = $( nowModalSyncer ).outerHeight( {margin:true} ) ; var cw = $( nowModalSyncer ).outerWidth() ; var ch = $( nowModalSyncer ).outerHeight() ; //センタリングを実行する $( nowModalSyncer ).css( {"left": ((w - cw)/2) + "px","top": ((h - ch)/2) + "px"} ) ; } } ) ;
サーバーにアップして、PCとSPのモーダル画像を違う画像したく思います。PCですと普通に閉じるボタンを押すと消えるのですが、SPでも閉じるのですがその直後に自動的にモーダルが再度表示されてしまいます。
ご教授お願い申し上げます。
あなたの回答
tips
プレビュー