質問するログイン新規登録

質問編集履歴

1

再現できないほど足りなかった記述など加筆修正致しました。

2021/11/07 06:56

投稿

maronteratail
maronteratail

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
- 小さい画面で、よくあるハンバーガーメニューを開きスクロールすると一旦メニューを閉じてまたを開くと前回スクロールしたままの位置で表示されます。
2
+ 高さを500pxほどの小さい画面で、よくあるハンバーガーメニューを開きメニューを一番下までスクロールしMNU8をクリックし再度メニューを開くと前回メニュー内でスクロールした一番下のままの位置で表示されます。
3
- メニューを開くたびにメニュー一番上に戻すようにしたいです。
3
+ メニューを開くたびにTOPが一番上まで来るような、メニュー内を一番上に戻すようにしたいです。
4
4
 
5
5
 
6
6
  ### 該当のソースコード
@@ -8,78 +8,171 @@
8
8
 
9
9
 
10
10
  <header id="ly_header">
11
- <div class="ly_header_inner">
11
+ <div class="ly_header_inner">
12
- <div class="el_headerNav_btn el_headerNav_btn__open"></div>
12
+ <div class="el_headerNav_btn el_headerNav_btn__open">open</div>
13
- <div class="bl_panel">
13
+ <div class="bl_panel">
14
- <div class="bl_panel_inner">
14
+ <div class="bl_panel_inner">
15
- <div class="el_headerNav_btn el_headerNav_btn__close"></div>
15
+ <div class="el_headerNav_btn el_headerNav_btn__close">close</div>
16
- <nav>
16
+ <nav>
17
- <ul class="bl_headerNav">
17
+ <ul class="bl_headerNav">
18
- <li class="bl_headerNav_item blurTrigger">
18
+ <li class="bl_headerNav_item blurTrigger">
19
- <a href="#" class="bl_headerNav_link">TOP</a>
19
+ <a href="#top" class="bl_headerNav_link">TOP</a>
20
- </li>
20
+ </li>
21
- <li class="bl_headerNav_item blurTrigger">
21
+ <li class="bl_headerNav_item blurTrigger">
22
- <a href="#" class="bl_headerNav_link">ABOUT</a>
22
+ <a href="#menu1" class="bl_headerNav_link">MENU1</a>
23
- </li>
23
+ </li>
24
- <li class="bl_headerNav_item blurTrigger">
24
+ <li class="bl_headerNav_item blurTrigger">
25
- <a href="#" class="bl_headerNav_link">MENU</a>
25
+ <a href="#menu2" class="bl_headerNav_link">MENU2</a>
26
- </li>
26
+ </li>
27
- <li class="bl_headerNav_item blurTrigger">
27
+ <li class="bl_headerNav_item blurTrigger">
28
- <a href="#" class="bl_headerNav_link">CONTACT</a>
28
+ <a href="#menu3" class="bl_headerNav_link">MENU3</a>
29
- </li>
29
+ </li>
30
- <li class="bl_headerNav_item blurTrigger">
30
+ <li class="bl_headerNav_item blurTrigger">
31
- <a href="#" class="bl_headerNav_link">BLOG</a>
31
+ <a href="#menu4" class="bl_headerNav_link">MENU4</a>
32
- </li>
32
+ </li>
33
+ <li class="bl_headerNav_item blurTrigger">
34
+ <a href="#menu5" class="bl_headerNav_link">MENU5</a>
35
+ </li>
36
+ <li class="bl_headerNav_item blurTrigger">
37
+ <a href="#menu6" class="bl_headerNav_link">MENU6</a>
38
+ </li>
39
+ <li class="bl_headerNav_item blurTrigger">
40
+ <a href="#menu7" class="bl_headerNav_link">MENU7</a>
41
+ </li>
42
+ <li class="bl_headerNav_item blurTrigger">
43
+ <a href="#menu8" class="bl_headerNav_link">MENU8</a>
44
+ </li>
33
- </ul>
45
+ </ul>
34
- </nav>
46
+ </nav>
35
- </div><!--.bl_panel_inner-->
47
+ </div><!--.bl_panel_inner-->
36
- </div><!--.bl_panel-->
48
+ </div><!--.bl_panel-->
37
- </div><!--.ly_header_inner-->
49
+ </div><!--.ly_header_inner-->
38
- </header>
50
+ </header>
51
+
52
+ <div class="content" id="top">TOP</div>
53
+ <div class="content" id="menu1">MENU1</div>
54
+ <div class="content" id="menu2">MENU2</div>
55
+ <div class="content" id="menu3">MENU3</div>
56
+ <div class="content" id="menu4">MENU4</div>
57
+ <div class="content" id="menu5">MENU5</div>
58
+ <div class="content" id="menu6">MENU6</div>
59
+ <div class="content" id="menu7">MENU7</div>
60
+ <div class="content" id="menu8">MENU8</div>
39
61
  ```
40
62
 
41
63
  ```css
64
+ body.fixed {
65
+ position: fixed;
66
+ width: 100%;
67
+ height: 100%;
68
+ left: 0;
69
+ }
42
70
  .bl_panel {
43
- width: 100%;
71
+ width: 100%;
44
- height: 100vh;
72
+ height: 100vh;
45
- background-color: rgba(266,162,172,0.8);
73
+ background-color: rgba(266,162,172,0.8);
46
- position: fixed;
74
+ position: fixed;
47
- top: 0;
75
+ top: 0;
48
- left: 0;
76
+ left: 0;
49
- transition: all .5s;
77
+ transition: all .5s;
50
- opacity: 0;
78
+ opacity: 0;
51
- z-index: -1;
79
+ z-index: -1;
52
-
53
- }
80
+ }
54
- .bl_panel.panelactive {
81
+ .bl_panel.panelactive {
55
- opacity: 1;
82
+ opacity: 1;
56
83
  z-index: 999;
57
- }
84
+ }
85
+ .bl_panel.panelactive .bl_panel_inner {
86
+ position: fixed;
87
+ top: 0;
88
+ left: 0;
89
+ width: 100%;
90
+ height: 100vh;
91
+ overflow: auto;
92
+ -webkit-overflow-scrolling: touch;
93
+ }
94
+ .bl_panel_inner nav {
95
+ z-index: 999;
96
+ width: 100%;
97
+ }
98
+ .bl_headerNav {
99
+ padding: 20px;
100
+ }
101
+ header#ly_header {
102
+ width: 100%;
103
+ height: 100px;
104
+ z-index: 999;
105
+ position: fixed; /* 上下スクロールでヘッダーの表示・非表示するアニメーション用 */
106
+ top: 0;
107
+ left: 0;
108
+ background: #333;
109
+ transition: all .5s;
110
+ }
111
+ header#ly_header.is-hide {
112
+ transform: translateY(-100%);
113
+ }
114
+ .el_headerNav_btn.el_headerNav_btn__open {
115
+ width: 100px;
116
+ height: 100px;
117
+ background: #ccc;
118
+ }
119
+ .el_headerNav_btn.el_headerNav_btn__close {
120
+ width: 100px;
121
+ height: 100px;
122
+ background: #0ff;
123
+ }
124
+ .content {
125
+ height: 50vh;
126
+ }
127
+ .bl_headerNav_link {
128
+ font-size: 16px;
129
+ padding: 20px;
130
+ display: block;
131
+ }
58
132
 
59
- .bl_panel.panelactive .bl_panel_inner {
133
+
60
- position: fixed;
61
- top: 0;
62
- left: 0;
63
- width: 100%;
64
- height: 100vh;
65
- overflow: auto;
66
- -webkit-overflow-scrolling: touch;
67
- }
68
- .bl_panel_inner nav {
69
- display: none;
70
- z-index: 999;
71
- width: 100%;
72
- }
73
134
  ```
74
135
 
75
136
 
76
137
  ```jquery
138
+ // 上下スクロールでヘッダーの表示・非表示するアニメーション用
139
+ var pos = 0;
140
+ function FixedAnime() {
141
+ var scroll = $(window).scrollTop();
142
+ var Header = $('#ly_header');
143
+ if ( scroll < pos || scroll < 200 ) {
144
+ Header.removeClass('is-hide');
145
+ } else {
146
+ Header.addClass('is-hide');
147
+ }
148
+ pos = scroll;
149
+ }
150
+
151
+ // ハンバーガーメニュー
152
+ var scrollPosition;
77
- $('.el_headerNav_btn__open').on('click', function() {
153
+ $('.el_headerNav_btn__open').click(function(){
154
+ scrollPosition = $(window).scrollTop();
155
+ $('body').addClass('fixed').css({'top': -scrollPosition});
78
- $('.bl_panel').addClass('panelactive');
156
+ $('.bl_panel').addClass('panelactive');
79
- });
157
+ });
158
+
80
- $('.el_headerNav_btn__close, .bl_headerNav_link').on('click', function() {
159
+ $('.el_headerNav_btn__close, .bl_headerNav_link').click(function(){
160
+ $('body').removeClass('fixed').css({'top': 0});
161
+ window.scrollTo( 0 , scrollPosition );
162
+
81
- $('.bl_panel').removeClass('panelactive');
163
+ $('.bl_panel').removeClass('panelactive');
164
+ $('.bl_panel').scrollTop(0);
82
- });
165
+ });
166
+
167
+ // 関数まとめ
168
+ $(window).on('load', function() {
169
+ FixedAnime();
170
+ });
171
+
172
+
173
+ $(window).on('scroll', function() {
174
+ FixedAnime() ;
175
+ });
83
176
  ```
84
177
 
85
178
 
@@ -87,8 +180,7 @@
87
180
 
88
181
 
89
182
  ### 試したこと
90
-
91
- スムーズスクロールのようにanimateでscrollTop: 0だと機能せず.bl_panelのcssをtop: 0にしても意味ありませんでした。
92
- 自力でで調べましたが、メニュー下の要素をスクロールても固定する方法しか出てこず、質問させていただきました。
183
+ 上記通り$('.bl_panel').scrollTop(0);としました。
184
+ 高さ500pxぐらいのブラウザ設定で、ハンバーガーメニュー内を一番下までスクロールしてMNU8をクリックし、再度メニューを開くと前回スクロールしたメニュー一番下のままで表示され、メニュー内のTOPが上に来ません。
93
185
  超初心者なので分かりづらかったら申し訳ございません。
94
186
  よろしくお願いいたします。