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

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

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

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

CSS

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

Q&A

0回答

862閲覧

[Javascript]同じ作りのモーダルを複数設置し、背景を固定した時にTOPに戻るのを回避したい

Master0121

総合スコア18

JavaScript

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

CSS

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

0グッド

0クリップ

投稿2021/06/06 20:37

######【概要】
jqueryが使えない環境でJavascriptにてモーダルの設置を行っていて、モーダルが1個であれば問題なく設置できたのですが
同じ作り(コンテンツの中身は違う)のモーダルを動的に複数設置するといった場合に、ID等を自動的に連番で付与して設置していく方法がわからずに困っています。
また、モーダルが表示された時に背景になる要素を固定してスクロールしないようにしたいのですが、モーダルが表示された際に固定はされるものの背景の要素がページのTOPまで戻ってしまいます。

######【実現できたこと】

  • モーダルの設置(1つ目)
  • 背景要素の固定

######【追加で実現したいこと】

  • 2つ目以降のモーダルの設置(ID等の自動付与)
  • 固定した背景がTOPに戻らずにその場で固定される

参考サイトを探したものの、jqueryであれば多少は分かるのですが生のJavascriptはまだ勉強不足で応用できるのかどうかもわかりませんでした。
なにかいい解決策をご教示いただけますでしょうか。何卒よろしくお願いいたします。

HTML

1<body> 2 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 3 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 4 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 5 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 6 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 7 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 8 9 <button type="button" id="openModal">モーダルを開く</button> 10 11 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 12 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 13 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 14 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 15 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 16 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 17 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 18 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 19 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 20 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 21 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 22 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 23 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 24 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 25 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 26 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 27 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 28 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 29 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 30 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 31 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 32 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 33 34 <section class="modalArea" id="modalArea"> 35 <div id="modalBg" class="modalBg"></div> 36 <div class="modalWrapper"> 37 <div class="modalContents"> 38 モーダルの中身 39 </div> 40 <div id="closeModal" class="closeModal">×</div> 41 </div> 42 </section> 43</body>

CSS

1 body.fixed { 2 position: fixed; 3 width: 100%; 4 height: 100%; 5 left: 0; 6 } 7 .modalArea { 8 visibility: hidden; 9 opacity : 0; 10 position: fixed; 11 z-index: 10; 12 top: 0; 13 left: 0; 14 width: 100%; 15 height: 100%; 16 transition: .4s; 17 } 18 .modalBg { 19 width: 100%; 20 height: 100%; 21 background-color: rgba(30,30,30,0.6); 22 } 23 .modalWrapper { 24 padding: 40px; 25 width: 884px; 26 background: #fff; 27 border: 1px solid #E3E3E3; 28 border-radius: 6px; 29 position: absolute; 30 top: 50%; 31 left: 50%; 32 transform:translate(-50%,-50%); 33 } 34 .closeModal { 35 position: absolute; 36 top: 0.5rem; 37 right: 1rem; 38 cursor: pointer; 39 } 40 .modalArea.is-show { 41 visibility: visible; 42 opacity : 1; 43 }

Javascript

1 (function () { 2 const modalArea = document.getElementById('modalArea'); 3 const openModal = document.getElementById('openModal'); 4 const closeModal = document.getElementById('closeModal'); 5 const modalBg = document.getElementById('modalBg'); 6 const toggle = [openModal,closeModal,modalBg]; 7 8 for(let i=0, len=toggle.length ; i<len ; i++){ 9 toggle[i].addEventListener('click',function(){ 10 modalArea.classList.toggle('is-show'); 11 let elements = document.getElementsByTagName("body"); 12 elements[0].classList.toggle("fixed"); 13 },false); 14 } 15}());

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

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

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

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

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

Lhankor_Mhy

2021/06/08 00:57

『ID等の自動付与』とありますが、もう少し具体的にお願いします。JavaScriptでHTMLを生成する、という意味ですか? 何個作るのでしょうか? 内部のコンテンツはどうなるのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問