前提・実現したいこと
JAVASCRIPT によるモダールの実装
アウトプットの一貫でJAVASCRIPTのモーダルの実装を行なっております。
それぞれの写真を押したらそれぞれのモーダルが表示されるということを
やってみたかったのですが、各写真と各モーダルに固有のクラスを付与して、
クリックしたら表示されるようになったのですが、
各写真にクラスをつけ、JavaScriptにその数だけコードを書くのは
今後写真などが増えたりした場合、運用やメンテナンス的にあまりよくないと
思い質問させていただきました。
色々ネットや本で調べてみたのですが、結局できずに最終的に
2つ目のコードで詰まってしまいました。これだとクリックしたら表示はされますが、
他のmodalを持ったクラスの写真も表示されて閉じます。
自分がやりたかったのは、その写真を押したらその写真のモーダルだけが表示され
もう一度押したら閉じる機能を持ったモーダルです。
根本的に考えた方が違うと思うのですが、自分で考えてダメでしたので
質問させていただきました。
よろしくお願いします。
HTML <figure class="modal modal-1"> <img src="img/sample/data-1.jpg" alt="写真その1" class="modal__img"> <figcaption>sample</figcaption> </figure> <div class="popup popup-1"> <figure> <img src="img/sample/data-1__large.jpg" alt="写真その1" class="popup__img"> <figcaption class="popup__caption">sample</figcaption> </figure> </div> <figure class="modal modal-2"> <img src="img/sample/data-2.jpg" alt="写真その2" class="modal__img"> <figcaption>sample</figcaption> </figure> <div class="popup popup-2"> <figure> <img src="img/sample/data-2__large.jpg" alt="写真その2" class="popup__img"> <figcaption class="popup__caption">sample</figcaption> </figure> </div> <figure class="modal modal-3"> <img src="img/sample/data-3.jpg" alt="写真その3" class="modal__img"> <figcaption>sample</figcaption> </figure> <div class="popup popup-3"> <figure> <img src="img/sample/data-3__large.jpg" alt="写真その3" class="popup__img"> <figcaption class="popup__caption">sample</figcaption> </figure> </div> function modalNav(){ const popup = document.querySelector('.popup'); let modal1 = document.querySelector('.modal-1'); let popup1 = document.querySelector('.popup-1'); let modal2 = document.querySelector('.modal-2'); let popup2 = document.querySelector('.popup-2'); let modal3 = document.querySelector('.modal-3'); let popup3 = document.querySelector('.popup-3'); modal1.addEventListener('click',()=>{ popup1.classList.add('active'); }); popup1.addEventListener('click',()=>{ popup1.classList.remove('active'); }); modal2.addEventListener('click',()=>{ popup2.classList.toggle('active'); }); popup2.addEventListener('click',()=>{ popup2.classList.remove('active'); }); modal3.addEventListener('click',()=>{ popup3.classList.toggle('active'); }); popup3.addEventListener('click',()=>{ popup3.classList.remove('active'); }); } modalNav();
2つ目
document.querySelectorAll('.modal').forEach((modalTarget)=>{ modalTarget.addEventListener('click',()=>{ const popup = document.querySelectorAll('.popup'); popup.forEach((popupTarget)=>{ popupTarget.classList.add('active'); popupTarget.addEventListener('click',()=>{ popupTarget.classList.remove('active'); }); }); }); });
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/26 08:31
2019/12/26 08:59