質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1621閲覧

モーダルウィンドウの挙動について

sarisari

総合スコア33

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/07/11 03:08

編集2020/07/11 03:09

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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

閉じる時はアニメーションがかかりませんでした

いえ、確認したところ、閉じる時にもアニメーションがかかっています。
ただ、

js

1element.classList.remove("on");

↑としているため、

css

1.on .p-whiteSpace { 2 opacity: 1; 3}

↑のスタイルが効かなくなり、

css

1.p-whiteSpace { 2 opacity: 0; 3}

↑が効いて、透明になっているため、見えないのと、

css

1.p-modalDateBox { 2/* 3 width:auto; 4 height: auto; 5 (初期値) 6*/ 7} 8 9.p-modalDateBox.on { 10 width: 100%; 11 height: 100%; 12}

↑となっているため、.onが外れた時に、.p-modalDateBoxがトランジションがかからないままサイズを失ってしまうのが原因です。


解決方法ですが、モーダルのスタイルがかなり混乱していますので、整理した方がいいと思います。
正直、コードを見ただけでは「正しい動作」がなんなのか、想像がつきません

  • アニメーションにするのかトランジションにするのかを決める
  • どの要素にアニメーション|トランジションをかけるのか決める
  • アニメーション|トランジションを適用するプロパティを決める

投稿2020/07/11 04:20

編集2020/07/11 04:23
Lhankor_Mhy

総合スコア36960

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sarisari

2020/07/12 07:37

動かすことが出来ました!! 確かにLhankor_Mhyさんのご指摘通り、アニメーション、トランジションが混在しており自分でも把握出来ておりませんでした。。 その点もどちらを利用するのか決めて見やすく改善いたします。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問