回答編集履歴

1

コード変更/文章変更

2021/11/07 11:16

投稿

sasa_
sasa_

スコア140

test CHANGED
@@ -1,260 +1,40 @@
1
- 先のメントにありましたように、最低限問題の事象が再現できるコードをご提示いただくと良いと思います。ご自身の開発環境でご質問のコードのみで構成されたhtmlファイルを作成してみたとき、質問内容と同じ状況は確認できないはずです。
1
+ コードの修正受け、再度回答させていただます。
2
2
 
3
- お急ぎの気持ちは大変よく分かりますが、問題の切り分けができていないと別な部分に問題がある場合に解決できません。
4
-
5
- また、回答者に「丸投げの質問」に感じられることがあります。そのような場合はサイトの趣旨と異なるため回答は少なくなります。
6
-
7
- 、試したこと意味がありませんでした」では構文エラなのか、動かなかったのか、動いが期待する動作でなくどのように動いたのかが分かりません。ご期待沿う回答をするために、意味がなかった「由・原因」知りたのです。
3
+ 開いメニュー側をトップに戻したいとのことなので、openをクリックしたとき、メニュを入れ要素スクロール位置を0にする」まは「closeするとき、メニューを入れ要素スクロール位置を0にする」処理を行うと良かと思います。
8
-
9
- 以下、ちょっと長いのですが...読みにくかったらごめんなさい。
10
-
11
- JavaScriptは問題と思われる部分のみ解説しています。clickイベントやfunctionの意味や書き方について不明な点はご自身でお調べ頂けますと幸いです。
12
4
 
13
5
 
14
6
 
15
- 下記CSSご質問内容ら最低限必要と思われるCSSで
7
+ 現在のJavaScript「クローズしたとき、`.bl_panel`スクロール位置を0にする」となっています。しし、`.bl_panel`にはCSSで`height: 100vh`が設定されているため、そもそもスクロールが発生しません
16
8
 
17
- (ご相談内容と異なっていたらみません!)
9
+ 実際にスクロールが発生するは`overflow: auto`を設定している`.bl_panel.panelactive .bl_panel_inner`なので、`.bl_panel_inner`にscrollTopを指定しま
18
-
19
- ```CSS
20
10
 
21
11
 
22
12
 
23
- .bl_panel {
13
+ `$('.el_headerNav_btn__open').click(`または`$('.el_headerNav_btn__close, .bl_headerNav_link').click()`のどちらかで`$('.bl_panel_inner').scrollTop(0);`を実行します。
24
14
 
25
- width: 100%;
26
-
27
- height: 100vh;
28
-
29
- background-color: rgba(266,162,172,0.8);
30
-
31
- position: fixed;
32
-
33
- top: 0;
34
-
35
- left: 0;
36
-
37
- transition: all .5s;
38
-
39
- opacity: 0;
40
-
41
- z-index: -1;
42
-
43
- }
44
-
45
- .bl_panel.panelactive {
46
-
47
- opacity: 1;
48
-
49
- z-index: 999;
50
-
51
- }
52
-
53
- .bl_panel.panelactive .bl_panel_inner {
15
+ CSSが`.bl_panel.panelactive .bl_panel_inner`なので、実行位置は`panelactive`をつけた後か、外す前です。
54
-
55
- position: fixed;
56
-
57
- top: 0;
58
-
59
- left: 0;
60
-
61
- width: 100%;
62
-
63
- height: 100vh;
64
-
65
- overflow: auto;
66
-
67
- -webkit-overflow-scrolling: touch;
68
-
69
- }
70
-
71
- .bl_panel_inner nav {
72
-
73
- z-index: 999;
74
-
75
- width: 100%;
76
-
77
- }
78
-
79
- /* 再現用 */
80
-
81
- /* ヘッダーを可視化 */
82
-
83
- header#ly_header {
84
-
85
- width: 100%;
86
-
87
- height: 100px;
88
-
89
- position: sticky;
90
-
91
- top: 0;
92
-
93
- left: 0;
94
-
95
- background: #333;
96
-
97
- }
98
-
99
- .el_headerNav_btn.el_headerNav_btn__open {
100
-
101
- width: 100px;
102
-
103
- height: 100px;
104
-
105
- background: #ccc;
106
-
107
- }
108
-
109
- .el_headerNav_btn.el_headerNav_btn__close {
110
-
111
- width: 100px;
112
-
113
- height: 100px;
114
-
115
- background: #0ff;
116
-
117
- }
118
-
119
- /* コンテンツに高さを追加 */
120
-
121
- .content {
122
-
123
- height: 50vh;
124
-
125
- }
126
-
127
- ```
128
16
 
129
17
 
130
18
 
131
- 下記HTMLはbody内に必要と思われるCSSです。
132
-
133
- ```HTML
134
19
 
135
20
 
136
-
137
- <header id="ly_header">
138
-
139
- <div class="ly_header_inner">
140
-
141
- <div class="el_headerNav_btn el_headerNav_btn__open"></div>
142
-
143
- <div class="bl_panel">
144
-
145
- <div class="bl_panel_inner">
146
-
147
- <div class="el_headerNav_btn el_headerNav_btn__close"></div>
148
-
149
- <nav>
150
-
151
- <ul class="bl_headerNav">
152
-
153
- <li class="bl_headerNav_item blurTrigger">
154
-
155
- <a href="#top" class="bl_headerNav_link">TOP</a>
156
-
157
- </li>
158
-
159
- <li class="bl_headerNav_item blurTrigger">
160
-
161
- <a href="#about" class="bl_headerNav_link">ABOUT</a>
162
-
163
- </li>
164
-
165
- <li class="bl_headerNav_item blurTrigger">
166
-
167
- <a href="#menu" class="bl_headerNav_link">MENU</a>
168
-
169
- </li>
170
-
171
- <li class="bl_headerNav_item blurTrigger">
172
-
173
- <a href="#contact" class="bl_headerNav_link">CONTACT</a>
174
-
175
- </li>
176
-
177
- <li class="bl_headerNav_item blurTrigger">
178
-
179
- <a href="#blog" class="bl_headerNav_link">BLOG</a>
180
-
181
- </li>
182
-
183
- </ul>
184
-
185
- </nav>
186
-
187
- </div><!--.bl_panel_inner-->
188
-
189
- </div><!--.bl_panel-->
190
-
191
- </div><!--.ly_header_inner-->
192
-
193
- </header>
194
-
195
- <div class="content" id="top">TOP</div>
196
-
197
- <div class="content" id="about">ABOUT</div>
198
-
199
- <div class="content" id="menu">MENU</div>
200
-
201
- <div class="content" id="contact">CONTACT</div>
202
-
203
- <div class="content" id="blog">BLOG</div>
204
-
205
- ```
206
-
207
-
208
-
209
- 問題のJavaScriptですが、どの要素に対してscrollTopを指定しましたか?
210
-
211
- close用の要素にscrollTopを指定することでTOPに戻ることができます。
212
-
213
- 下記は`.el_headerNav_btn__close` クリックしとき、「トップクローする」「`.panelactive` 削除る」の2つの処理を実行します。
21
+ 下記は開くときにつけたパターン。オープン時はclassが付いていないので、addClass`でclassつけ実行します。クローズ時に実行するなら、class前にscrollTopでトップに戻ておきます。
214
22
 
215
23
 
216
24
 
217
25
  ```JavaScript
218
26
 
27
+ $('.el_headerNav_btn__open').click(function(){
219
28
 
29
+ scrollPosition = $(window).scrollTop();
220
30
 
221
- $('.el_headerNav_btn__close').on('click', function() {
31
+ $('body').addClass('fixed').css({'top': -scrollPosition});
222
32
 
223
- $('body, html').animate({
33
+ $('.bl_panel').addClass('panelactive');
224
34
 
225
- scrollTop: 0
35
+ $('.bl_panel_inner').scrollTop(0);
226
36
 
227
- }, 300);
228
-
229
- $('.bl_panel').removeClass('panelactive');
230
-
231
- });
37
+ });
232
-
233
- ```
234
-
235
-
236
-
237
- このとき、下記のように`.el_headerNav_btn__close, .bl_headerNav_link` と指定すると期待通りに動きません。ナビゲーションリンクをクリックしたときも動作対象に含まれるためです。
238
-
239
- ナビゲーションリンクをクリックしてTOPに戻っては意味がありません。
240
-
241
-
242
-
243
- ```JavaScript
244
-
245
-
246
-
247
- $('.el_headerNav_btn__close, .bl_headerNav_link').on('click', function() {
248
-
249
- $('body, html').animate({
250
-
251
- scrollTop: 0
252
-
253
- }, 300);
254
-
255
- $('.bl_panel').removeClass('panelactive');
256
-
257
- });
258
38
 
259
39
  ```
260
40
 
@@ -262,44 +42,4 @@
262
42
 
263
43
 
264
44
 
265
- この問題は、たとえば「開くボタンをクリックしたとき「閉じるボタンをクリックしたとき」「リンクをクリックしたとき」それぞれに処理を指定することで解決できます。
266
-
267
- 分かりやすくそれぞれのclickイベントに対して個別に処理したものが下記です。
268
-
269
- ご相談の、「閉じるボタンでTopに戻る」はこちらで解決できるのではないかと推察いたします。
270
-
271
- ```JavaScript
272
-
273
-
274
-
275
- // 開くボタンをクリックしたとき
276
-
277
- $('.el_headerNav_btn__open').on('click', function() {
278
-
279
- $('.bl_panel').addClass('panelactive');
280
-
281
- });
282
-
283
- // 閉じるボタンをクリックしたとき
284
-
285
- $('.el_headerNav_btn__close').on('click', function() {
286
-
287
- $('body, html').animate({
288
-
289
- scrollTop: 0
45
+ お体ご自愛くださいませ。
290
-
291
- }, 300);
292
-
293
- $('.bl_panel').removeClass('panelactive');
294
-
295
- });
296
-
297
- // ナビリンクをクリックしたとき
298
-
299
- $('.bl_headerNav_link').on('click', function() {
300
-
301
- $('.bl_panel').removeClass('panelactive');
302
-
303
- });
304
-
305
- ```