質問編集履歴

2

クラスを修正するのを忘れた

2023/04/22 10:40

投稿

a_a
a_a

スコア13

test CHANGED
File without changes
test CHANGED
@@ -22,13 +22,15 @@
22
22
  ### 修正
23
23
  cssが間違っていたので修正。
24
24
  javascriptも意図した挙動になるように修正。
25
-
25
+ cssのクラスを修正した後html側も修正
26
+
27
+ ▼修正後
26
28
  ```HTML
27
29
  <p><a class="js_mdl_open mdl_open_txt" href="" data-mdlopen="mdl1">モーダル開く</a></p>
28
30
 
29
31
  <div class="mdl js_mdl" data-mdl="mdl1"><!-- モーダル -->
30
- <div class="mdl_overlay"></div>
32
+ <div class="js_mdl_overlay mdl_overlay"></div>
31
- <div class="js_mdl_wrapper mdl_wrapper">
33
+ <div class="mdl_wrapper">
32
34
  <div class="mdl_white"><!-- white -->
33
35
  <div class="mdl_content"><!-- content -->
34
36
  <div class="mdl_close"><span class="mdl_close_icon js_mdl_close_icon"></span></div><!-- 閉じるボタン -->

1

cssクラス名等変更、javascriptは解決したコードを追記

2023/04/22 09:30

投稿

a_a
a_a

スコア13

test CHANGED
File without changes
test CHANGED
@@ -17,6 +17,11 @@
17
17
 
18
18
  「 window.pageYOffset 」が原因のような気がしますが、どうしたらよいのか分かりません。
19
19
  よろしくお願い致します(o_ _)o
20
+
21
+
22
+ ### 修正
23
+ cssが間違っていたので修正。
24
+ javascriptも意図した挙動になるように修正。
20
25
 
21
26
  ```HTML
22
27
  <p><a class="js_mdl_open mdl_open_txt" href="" data-mdlopen="mdl1">モーダル開く</a></p>
@@ -38,16 +43,26 @@
38
43
  </div><!--END mdl_wrapper -->
39
44
  </div><!--END mdl -->
40
45
  ```
46
+ ▼修正後
41
47
  ```CSS
42
48
  .mdl {
43
49
  display: none;
44
50
  opacity:0;
45
51
  }
46
- .mdl.modal_active {
52
+ .mdl.mdl_active {
47
53
  display: block;
48
54
  opacity:1;
49
- animation-name: modalactive;
55
+ animation-name: mdlactive;
50
56
  animation-duration: .3s;
57
+ width: 100%;
58
+ height: 100vh;
59
+ position: fixed;
60
+ top: 0;
61
+ left: 0;
62
+ background-color: transparent;
63
+ overscroll-behavior: contain;
64
+ overflow-y: scroll;
65
+ z-index: 10000;
51
66
  }
52
67
  @keyframes modalactive{
53
68
  from {opacity:0;}
@@ -79,6 +94,7 @@
79
94
  width: min(100%,770px);
80
95
  height: auto;
81
96
  background-color: #fff;
97
+ z-index: 10002;
82
98
  }
83
99
  .mdl_content {
84
100
  background-color: #fff;
@@ -194,3 +210,47 @@
194
210
  });
195
211
  }
196
212
  ```
213
+ ▼修正後
214
+ ```Javascript
215
+ const mdlOpens = document.querySelectorAll('.js_mdl_open');// 開くボタン
216
+ const mdls = document.querySelectorAll('.js_mdl');// モーダル本体
217
+ const body = document.body;
218
+
219
+ mdlOpens.forEach( mdlOpen => {
220
+ //モーダル開くイベント発火
221
+ mdlOpen.addEventListener("click", e =>{
222
+ e.preventDefault();
223
+ e.stopPropagation();
224
+
225
+ body.style.top = -(window.pageYOffset) +'px';//fixedより後にきてはダメ
226
+ const datavalue = mdlOpen.dataset.mdlopen;//dataset.mdlopen
227
+
228
+ mdls.forEach( (mdl) => {
229
+ if( datavalue == mdl.dataset.mdl){//dataset.mdl
230
+ body.style.position = "fixed";
231
+ mdl.classList.add('mdl_active');
232
+
233
+ const closebtn = mdl.querySelector('.js_mdl_close_icon');
234
+ const mdlOverlay = mdl.querySelector('.js_mdl_overlay');
235
+
236
+ let scrollY = body.style.top;// topの値取得して変数に格納
237
+
238
+ closebtn.addEventListener('click',closeModal);
239
+ mdlOverlay.addEventListener('click',closeModal);
240
+
241
+ // モーダル閉じる
242
+ function closeModal(){
243
+ mdl.classList.remove('mdl_active')
244
+ body.style.position = "";
245
+ body.style.top = '';
246
+ window.scrollTo({
247
+ behavior: "instant",
248
+ left: 0,
249
+ top: parseInt(scrollY || '0')*-1
250
+ });
251
+ };//closeModal
252
+ }//if
253
+ })//forEach
254
+ })
255
+ })//forEach
256
+ ```