javascript初心者です。
現在自作モーダルを作成しており、モーダルウィンドウのアニメーションで躓きましたので投稿いたしました。
モーダルは自作のため参考サイトはなく、動きの部分で参考にしたのが下記になります。
https://sole-color-blog.com/blog/707/
上記のサイトでボタンをクリックした時の処理で、animationスタイルを付与して、開く時、閉じる時のアニメーションを別々にしておりましたので、上記を参考にanimationを付与しましたが、開く時はアニメーションがかかり、閉じる時はアニメーションがかかりませんでした。
閉じる時のスタイル付与は問題なく行われており、原因がわかりません、、、
原因がわかる方やその他改善案がある方はお知恵をお貸し下さい。
宜しくお願い致します。
html
1<section> 2 <img alt="" src="/corporate/bsl/topic/csr_03.png"> 3 <div class="p-csr-txtBox"> 4 <p class="tag">CRS</p> 5 <h3>サンプルテキストサンプルテキストサンプルテキストサンプルテキスト</h3> 6 <p class="p-csr-txt"> 7 サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト 8 </p> 9 <button class="p-modalBtn" value="date01">続きを読む</button> 10 </div> 11</section> 12 13 14 15<article class="p-modalDateBox on" id="date01"> 16 <div class="p-modal-bg"></div> 17 <div class="p-whiteSpace"> 18 <div class="heading"> 19 <p class="tag">aaaa</p> 20 <p class="date">2020.06.24</p> 21 </div> 22 <button class="close">閉じる</button> 23 </div> 24</article> 25 26
css
1.p-modalDateBox { 2 position: absolute; 3 opacity: 0; 4 z-index: -1; 5 transition: 1s; 6} 7 8.p-modalDateBox.on { 9 opacity: 1; 10 display: block; 11 position: absolute; 12 width: 100%; 13 height: 100%; 14 top: 0; 15 left: 0; 16 z-index: 1; 17 transition: 1s; 18} 19 20/*モーダルウィンドウ*/ 21.p-modal-bg { 22 background: #00000063; 23 position: fixed; 24 width: 100%; 25 height: 100%; 26 top: 0; 27 left: 0; 28 z-index: -1; 29} 30 31.on .p-modal-bg { 32 z-index: 2; 33} 34 35.p-whiteSpace { 36 position: absolute; 37 width: 90%; 38 height: 90%; 39 background-color: #FFF; 40 left: 0; 41 right: 0; 42 top: 80px; 43 bottom: 0; 44 margin: auto; 45 overflow-y: scroll; 46 z-index: 3; 47 opacity: 0; 48 transform: translate(0, -500px); 49} 50 51.on .p-whiteSpace { 52 opacity: 1; 53 top: 0; 54 transform: translate(0, 0px); 55} 56 57@keyframes modal { 58 0% { 59 top: -100% 60 } 61 62 100% { 63 top: 50% 64 } 65} 66 67@keyframes modalClose { 68 0% { 69 top: 50% 70 } 71 72 100% { 73 top: -100% 74 } 75} 76
javascript
1//外部ファイル読み込み 2axios.get("modal.txt").then(response => { 3 const body = document.querySelector('.modal'); 4 body.innerHTML = response.data 5}) 6 7 8//モーダルウィンドウ 9 10const close = document.querySelectorAll(".close"); 11const modalBox = document.querySelectorAll(".p-modalDateBox"); 12const modalBg = document.querySelectorAll(".p-modal-bg"); 13const whiteSpace = document.querySelectorAll(".p-whiteSpace"); 14 15console.log(modalBox); 16modalBox.forEach(element => { 17 console.log(element) 18 element.classList.remove("on"); 19 20 close.forEach(c => { 21 c.addEventListener("click", function () { 22 element.classList.remove("on"); 23 }); 24 }); 25 26 modalBg.forEach(m => { 27 m.addEventListener("click", function () { 28 element.classList.remove("on"); 29 whiteSpace.forEach(w =>{ 30 console.log("animate"); 31 w.style.animation = "modalClose 2s"; 32 }) 33 }); 34 }); 35}); 36 37 38document.body.addEventListener('click', function (event) { 39 if (event.target.className == "p-modalBtn") { 40 const v = event.target.value; 41 const modelId = document.querySelector("#" + v); 42 console.log(modelId); 43 modelId.classList.add("on"); 44 whiteSpace.forEach(w =>{ 45 w.style.animation = "modal 2s"; 46 }) 47 } 48}, false)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/12 07:37