パラメーターIDと一致するdata-target を探して表示させたい
画像のように一覧から画像をクリックすると画像と説明文が出で来るモーダルウィンドウを作りました。
パラメーターを取得して一致する要素を(URLで外から飛んできても)開けるようにしたいのですが
パラメーターID【paramId】と一致するdata-targetを探してそれを表示できれば完成しますが取得が上手くできません
var data = document.querySelectorAll('[data-target="'+paramId+'"]')
この探し方を試しましたが違いました、、
参考サイトはここですhttps://www.tam-tam.co.jp/tipsnote/javascript/post9911.html
<ul class="itemList"> <li> <a href="#" class="js-modal-open" data-target="modal01"><img src="img/bag1.png"></a></li> <li> <a href="#" class="js-modal-open" data-target="modal02"><img src="img/bag1.png"></a> </li> <li> <a href="#" class="js-modal-open" data-target="modal03"><img src="img/bag1.png"></a> </li> </ul> <div id="modal01" class="modal js-modal"> <div class="modal-bg js-modal-close"> </div> <div class="modal-content"> <img src="img/bag1.png"> <div> <h3>説明</h3> <p>テキストテキスト</p> <a href="" class="modal-l">リンク</a> <a href="#" class="js-modal-close bt"></a> </div> </div> </div> <div id="modal02" class="modal js-modal"> <div class="modal-bg js-modal-close"> </div> <div class="modal-content"> <img src="img/bag1.png"> <div> <h3>説明</h3> <p>テキストテキスト</p> <a href="" class="modal-l">リンク</a> <a href="#" class="js-modal-close bt"></a> </div> </div> </div>
<script> // URLのパラメータを取得 var urlParam = location.search.substring(1); // URLにパラメータが存在する場合 if(urlParam) { // 「&」が含まれている場合は「&」で分割 var param = urlParam.split('&'); // パラメータを格納する用の配列を用意 var paramArray = []; // 用意した配列にパラメータを格納 for (i = 0; i < param.length; i++) { var paramItem = param[i].split('='); paramArray[paramItem[0]] = paramItem[1]; } paramId = paramItem[1]; console.log(paramId); // パラメータidを判断する if (paramId == 'modal01') { var target = $(paramId).data('target'); var modal = document.getElementById(target); scrollPosition = $(window).scrollTop(); $('body').addClass('fixed').css({'top': -scrollPosition}); $('.js-modal').fadeIn(); } else { alert('違う'); } } // モーダルウィンドウを閉じる $('.js-modal-close').on('click', function(){ $("header").fadeIn(); $('body').removeClass('fixed'); window.scrollTo( 0 , scrollPosition ); $('.js-modal').fadeOut(); return false; }); </script>
元々のクリックしてモーダルウィンドウを開いていたコードはこちらです
//モーダルウィンドウを開く $('.js-modal-open').on('click', function(){ var target = $(this).data('target'); var modal = document.getElementById(target); scrollPosition = $(window).scrollTop(); $('body').addClass('fixed').css({'top': -scrollPosition}); $('.js-modal').fadeIn(); return false; });
css
/* モーダル全体(背景+本体) */ .modal{ display: none; position: fixed; top: 0; height: 100vh; width: 100%; } /* モーダル背景 */ .modal-bg{ position: absolute; height: 100vh; width: 100%; background: rgba(0, 0, 0, 0.8); } /* モーダル本体 */ .modal-content{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); overflow: auto; /* はみ出た部分はスクロールさせる */ height: 80%;/* これが無いと「overflow:scroll」が利かない */ width: 60%;/* これが無いと「overflow:scroll」が利かない */ background: white; } /* モーダルウィンドウ表示中に記事本体を固定 */ body.fixed { position: fixed; width: 100%; height: 100%; left: 0; }
追記
<ul class="itemList"> <li><img value="d1" data-target="#d1"src="img/bag1.png"></li> <li><img value="d2" data-target="#d2" src="img/bag1.png"> </li> <li><img value="d3" data-target="#d3"src="img/bag1.png"> </li> </ul> <dialog id="d1"> <div class="modal-bg"> <div class="modal-content"> <img src="img/bag1.png"> <div> <h3>11111説明</h3> <p>テキストテキスト</p> <a href="" class="modal-l">リンク</a> <input type="button" class="close bt"> </div> </div> </div> </dialog> <dialog id="d2"> <div class="modal-bg"> <div class="modal-content"> <img src="img/bag1.png"> <div> <h3>222222説明</h3> <p>テキストテキスト</p> <a href="" class="modal-l">リンク</a> <input type="button"class="close bt"> </div> </div> </div> </dialog> <dialog id="d3"> <div class="modal-bg"> </div> <div class="modal-content"> <img src="img/bag1.png"> <div> <h3>333333説明</h3> <p>テキストテキスト</p> <a href="" class="modal-l">リンク</a> <input type="button" class="close bt"> </div> </div> </dialog>
追記css
dialog{ background: #ffffff00; top: 0; height: 122vh; width: 100%; margin: 0 0; padding: 0 0; border: none; position: fixed; z-index: 100000; } /* モーダル本体 */ .modal-content{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); overflow: auto; /* はみ出た部分はスクロールさせる */ height: 80%;/* これが無いと「overflow:scroll」が利かない */ width: 60%;/* これが無いと「overflow:scroll」が利かない */ background: white; z-index: 100000; } /* モーダルウィンドウ表示中に記事本体を固定 */ body.fixed { position: fixed; width: 100%; height: 100%; left: 0; background: #000000; } .modal-content img{ width:100%; } input.bt{ width: 36px; height: 36px; background: url(img/close.png) top right no-repeat; position:absolute; top:1%; right: 1%; border: none; } .modal-content div{ padding: 20px; } a.modal-l{ display:block; } ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-thumb { background: #8e8e8e; border-radius: 5px; } ::-webkit-scrollbar-track { background: #eeeeee; border-radius: 5px; } /* モーダル背景 */ .modal-bg{ position: fixed; width: 100%; height: 100%; left: 0; background: #000000d6; z-index: 1; }
回答2件
あなたの回答
tips
プレビュー