質問編集履歴
2
クラスを修正するのを忘れた
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="
|
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は解決したコードを追記
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.m
|
52
|
+
.mdl.mdl_active {
|
47
53
|
display: block;
|
48
54
|
opacity:1;
|
49
|
-
animation-name: m
|
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
|
+
```
|