質問編集履歴

3

JSでなくCSS擬似クラスで開く・閉じるアクションを実装していましたので、スワイプ時も、CSSで対応する方針にしました。

2019/09/02 03:45

投稿

KotaroHayashi
KotaroHayashi

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- JSでスマホ用ドロワーを作成しており、
3
+ スマホ用ドロワーを作成しており、
4
4
 
5
5
  クリックで開く、メニュー外クリックで閉じるは実装できています。
6
6
 
@@ -16,9 +16,7 @@
16
16
 
17
17
  ### 発生している問題・エラーメッセージ
18
18
 
19
- JSメニュOPEN状態のクラスを除去できない
19
+ スワイプドロワ閉じ処理が追加できない
20
-
21
-
22
20
 
23
21
 
24
22
 
@@ -64,55 +62,283 @@
64
62
 
65
63
 
66
64
 
67
- ```Jacascript
68
-
69
- // スマホ用イベント設定
70
-
71
- var el_hitarea = document.getElementById('ham');
72
-
73
-
74
-
75
- el_hitarea.addEventListener('touchstart', function(event) {
76
-
77
- console.log('タッチ開始');
78
-
79
- }, false);
80
-
81
-
82
-
83
- el_hitarea.addEventListener('touchmove', function(event) {
84
-
85
- console.log('タッチスクロール動作');
86
-
87
- if($('.menu-trigger').hasClass('active')){
88
-
89
- $('.menu-trigger').removeClass('active');
90
-
91
- $('.nav').removeClass('open');
92
-
93
- $('.overlay').removeClass('open');
94
-
95
- } else {
96
-
97
- $(this).addClass('active');
98
-
99
- $('.nav').addClass('open');
100
-
101
- $('.overlay').addClass('open');
102
-
103
- }
104
-
105
- event.preventDefault(); // タッチによる画面スクロールを止める
106
-
107
- }, false);
108
-
109
-
110
-
111
- el_hitarea.addEventListener('touchend', function(event) {
112
-
113
- console.log('タッチ終了');
114
-
115
- }, false);
65
+ ```CSS
66
+
67
+ .contents {
68
+
69
+ transition: transform .6s cubic-bezier(0.215, 0.61, 0.355, 1);
70
+
71
+ }
72
+
73
+ #navTgl:checked ~ .contents {
74
+
75
+ transform: translateX(250px);
76
+
77
+ }
78
+
79
+
80
+
81
+ /* :::::: toggle button :::::: */
82
+
83
+ #navTgl {
84
+
85
+ display: none;
86
+
87
+ }
88
+
89
+ label {
90
+
91
+ cursor: pointer;
92
+
93
+ position: absolute;
94
+
95
+ top: 2.2vh;
96
+
97
+ left: 5vw;
98
+
99
+ }
100
+
101
+ .open {
102
+
103
+ z-index: 2;
104
+
105
+ width: 24px;
106
+
107
+ height: 24px;
108
+
109
+ /* background: lightSeaGreen; */
110
+
111
+ transition: background .6s, transform .6s cubic-bezier(0.215, 0.61, 0.355, 1);
112
+
113
+ background-image: url(../img/ham.png);
114
+
115
+ background-repeat: none;
116
+
117
+ background-size: 24px;
118
+
119
+ background-repeat: no-repeat;
120
+
121
+ }
122
+
123
+ .open::before,
124
+
125
+ .open::after {
126
+
127
+ content: "";
128
+
129
+ }
130
+
131
+ .open span,
132
+
133
+ .open::before,
134
+
135
+ .open::after {
136
+
137
+ content: "";
138
+
139
+ position: absolute;
140
+
141
+ top: calc(50% - 1px);
142
+
143
+ left: 30%;
144
+
145
+ width: 40%;
146
+
147
+ /*border-bottom: 2px solid white;*/
148
+
149
+ transition: transform .6s cubic-bezier(0.215, 0.61, 0.355, 1);
150
+
151
+ }
152
+
153
+ .open::before {
154
+
155
+ transform: translateY(-8px);
156
+
157
+ }
158
+
159
+ .open::after {
160
+
161
+ transform: translateY(8px);
162
+
163
+ }
164
+
165
+ .close {
166
+
167
+ z-index: 1;
168
+
169
+ width: 100%;
170
+
171
+ height: 100%;
172
+
173
+ pointer-events: none;
174
+
175
+ transition: background .6s;
176
+
177
+ margin: 0 0 0 -25px;
178
+
179
+ }
180
+
181
+ #navTgl:checked + .open {
182
+
183
+ background: indianRed;
184
+
185
+ transform: translateX(250px);
186
+
187
+ display: none;
188
+
189
+ }
190
+
191
+ #navTgl:checked + .open span {
192
+
193
+ transform: scaleX(0);
194
+
195
+ }
196
+
197
+ #navTgl:checked + .open::before {
198
+
199
+ transform: rotate(45deg);
200
+
201
+ }
202
+
203
+ #navTgl:checked + .open::after {
204
+
205
+ transform: rotate(-45deg);
206
+
207
+ }
208
+
209
+ #navTgl:checked ~ .close {
210
+
211
+ pointer-events: auto;
212
+
213
+ background: rgba(0,0,0,.5);
214
+
215
+ width: 100vh;
216
+
217
+ height: 100vh;
218
+
219
+ margin: -2.2vh 0 0px -5vw;
220
+
221
+ }
222
+
223
+
224
+
225
+ /* :::::: drawer menu :::::: */
226
+
227
+ .hammenu {
228
+
229
+ z-index: 1;
230
+
231
+ position: fixed;
232
+
233
+ overflow: auto;
234
+
235
+ top: 0;
236
+
237
+ left: 0;
238
+
239
+ width: 67vw;
240
+
241
+ height: 100vh;
242
+
243
+ margin: 0;
244
+
245
+ padding: 10px;
246
+
247
+ box-sizing: border-box;
248
+
249
+ background: #ffffff;
250
+
251
+ transform: translateX(-100%);
252
+
253
+ transition: transform .6s cubic-bezier(0.215, 0.61, 0.355, 1);
254
+
255
+ }
256
+
257
+ .hammenu h2,
258
+
259
+ .hammenu a {
260
+
261
+ color: rgba(0,0,0,.54);
262
+
263
+ font-size: 16px;
264
+
265
+ }
266
+
267
+ .hammenu h2 {
268
+
269
+ text-align: center;
270
+
271
+ }
272
+
273
+ .hammenu ul {
274
+
275
+ margin: 0;
276
+
277
+ padding: 0;
278
+
279
+ }
280
+
281
+ .hammenu li {
282
+
283
+ font-size: .8em;
284
+
285
+ line-height: 1.4;
286
+
287
+ text-align: left;
288
+
289
+ margin: 0px 0px 0px 0px;
290
+
291
+ }
292
+
293
+ .hammenu li:not(:first-child) {
294
+
295
+ border-top: 1px solid rgba(255,255,255,.6);
296
+
297
+ }
298
+
299
+ .hammenu a {
300
+
301
+ /* display: block;*/
302
+
303
+ /* padding: 1em 2em;*/
304
+
305
+ text-decoration: inherit;
306
+
307
+ transition: background .6s;
308
+
309
+ }
310
+
311
+ /*.hammenu a:hover {
312
+
313
+ background: black;
314
+
315
+ }
316
+
317
+ */
318
+
319
+ .hammenu img{
320
+
321
+ padding:0 4vw 0 0;
322
+
323
+ }
324
+
325
+
326
+
327
+
328
+
329
+ #navTgl:checked ~ .hammenu {
330
+
331
+ transform: none;
332
+
333
+ }
334
+
335
+
336
+
337
+ .hamlogo{
338
+
339
+ margin:0 0 0 0;
340
+
341
+ }
116
342
 
117
343
  ```
118
344
 
@@ -120,9 +346,7 @@
120
346
 
121
347
  ### 試したこと
122
348
 
123
-
124
-
125
- コンソールにてタッチ動作アクションを検地
349
+ CSS擬似クラスにてアクションを追加試行中
126
350
 
127
351
 
128
352
 

2

CSSでOPEN・CLOSE動作をつけていましたので参考URLを追記

2019/09/02 03:45

投稿

KotaroHayashi
KotaroHayashi

スコア6

test CHANGED
File without changes
test CHANGED
@@ -131,3 +131,7 @@
131
131
 
132
132
 
133
133
  CSSでクラスを当ててドロワーのOPEN・CLOSEを切り替えています
134
+
135
+ 参考
136
+
137
+ https://lopan.jp/css-animation-drawer/

1

JSの記述にミスがあったため訂正

2019/09/02 03:39

投稿

KotaroHayashi
KotaroHayashi

スコア6

test CHANGED
File without changes
test CHANGED
@@ -82,15 +82,11 @@
82
82
 
83
83
  el_hitarea.addEventListener('touchmove', function(event) {
84
84
 
85
- // if($('open').length){
86
-
87
- // if($('.menu-trigger').hasClass('active')){
88
-
89
85
  console.log('タッチスクロール動作');
90
86
 
91
- if($(this).hasClass('active')){
87
+ if($('.menu-trigger').hasClass('active')){
92
88
 
93
- $(this).removeClass('active');
89
+ $('.menu-trigger').removeClass('active');
94
90
 
95
91
  $('.nav').removeClass('open');
96
92
 
@@ -106,11 +102,7 @@
106
102
 
107
103
  }
108
104
 
109
- // }
110
-
111
105
  event.preventDefault(); // タッチによる画面スクロールを止める
112
-
113
- // }
114
106
 
115
107
  }, false);
116
108