前提・実現したいこと
高さを500pxほどの小さい画面で、よくあるハンバーガーメニューを開きメニューを一番下までスクロールしMNU8をクリックし、再度メニューを開くと前回メニュー内でスクロールした一番下のままの位置で表示されます。
メニューを開くたびにTOPが一番上まで来るような、メニュー内を一番上に戻すようにしたいです。
該当のソースコード
html
1 2 3<header id="ly_header"> 4 <div class="ly_header_inner"> 5 <div class="el_headerNav_btn el_headerNav_btn__open">open</div> 6 <div class="bl_panel"> 7 <div class="bl_panel_inner"> 8 <div class="el_headerNav_btn el_headerNav_btn__close">close</div> 9 <nav> 10 <ul class="bl_headerNav"> 11 <li class="bl_headerNav_item blurTrigger"> 12 <a href="#top" class="bl_headerNav_link">TOP</a> 13 </li> 14 <li class="bl_headerNav_item blurTrigger"> 15 <a href="#menu1" class="bl_headerNav_link">MENU1</a> 16 </li> 17 <li class="bl_headerNav_item blurTrigger"> 18 <a href="#menu2" class="bl_headerNav_link">MENU2</a> 19 </li> 20 <li class="bl_headerNav_item blurTrigger"> 21 <a href="#menu3" class="bl_headerNav_link">MENU3</a> 22 </li> 23 <li class="bl_headerNav_item blurTrigger"> 24 <a href="#menu4" class="bl_headerNav_link">MENU4</a> 25 </li> 26 <li class="bl_headerNav_item blurTrigger"> 27 <a href="#menu5" class="bl_headerNav_link">MENU5</a> 28 </li> 29 <li class="bl_headerNav_item blurTrigger"> 30 <a href="#menu6" class="bl_headerNav_link">MENU6</a> 31 </li> 32 <li class="bl_headerNav_item blurTrigger"> 33 <a href="#menu7" class="bl_headerNav_link">MENU7</a> 34 </li> 35 <li class="bl_headerNav_item blurTrigger"> 36 <a href="#menu8" class="bl_headerNav_link">MENU8</a> 37 </li> 38 </ul> 39 </nav> 40 </div><!--.bl_panel_inner--> 41 </div><!--.bl_panel--> 42 </div><!--.ly_header_inner--> 43 </header> 44 45 <div class="content" id="top">TOP</div> 46 <div class="content" id="menu1">MENU1</div> 47 <div class="content" id="menu2">MENU2</div> 48 <div class="content" id="menu3">MENU3</div> 49 <div class="content" id="menu4">MENU4</div> 50 <div class="content" id="menu5">MENU5</div> 51 <div class="content" id="menu6">MENU6</div> 52 <div class="content" id="menu7">MENU7</div> 53 <div class="content" id="menu8">MENU8</div>
css
1body.fixed { 2 position: fixed; 3 width: 100%; 4 height: 100%; 5 left: 0; 6} 7.bl_panel { 8 width: 100%; 9 height: 100vh; 10 background-color: rgba(266,162,172,0.8); 11 position: fixed; 12 top: 0; 13 left: 0; 14 transition: all .5s; 15 opacity: 0; 16 z-index: -1; 17} 18.bl_panel.panelactive { 19 opacity: 1; 20 z-index: 999; 21} 22.bl_panel.panelactive .bl_panel_inner { 23 position: fixed; 24 top: 0; 25 left: 0; 26 width: 100%; 27 height: 100vh; 28 overflow: auto; 29 -webkit-overflow-scrolling: touch; 30} 31.bl_panel_inner nav { 32 z-index: 999; 33 width: 100%; 34} 35.bl_headerNav { 36 padding: 20px; 37} 38header#ly_header { 39 width: 100%; 40 height: 100px; 41 z-index: 999; 42 position: fixed; /* 上下スクロールでヘッダーの表示・非表示するアニメーション用 */ 43 top: 0; 44 left: 0; 45 background: #333; 46 transition: all .5s; 47} 48header#ly_header.is-hide { 49 transform: translateY(-100%); 50} 51.el_headerNav_btn.el_headerNav_btn__open { 52 width: 100px; 53 height: 100px; 54 background: #ccc; 55} 56.el_headerNav_btn.el_headerNav_btn__close { 57 width: 100px; 58 height: 100px; 59 background: #0ff; 60} 61.content { 62 height: 50vh; 63} 64.bl_headerNav_link { 65 font-size: 16px; 66 padding: 20px; 67 display: block; 68} 69 70
jquery
1// 上下スクロールでヘッダーの表示・非表示するアニメーション用 2var pos = 0; 3function FixedAnime() { 4 var scroll = $(window).scrollTop(); 5 var Header = $('#ly_header'); 6 if ( scroll < pos || scroll < 200 ) { 7 Header.removeClass('is-hide'); 8 } else { 9 Header.addClass('is-hide'); 10 } 11 pos = scroll; 12} 13 14// ハンバーガーメニュー 15var scrollPosition; 16 $('.el_headerNav_btn__open').click(function(){ 17 scrollPosition = $(window).scrollTop(); 18 $('body').addClass('fixed').css({'top': -scrollPosition}); 19 $('.bl_panel').addClass('panelactive'); 20 }); 21 22 $('.el_headerNav_btn__close, .bl_headerNav_link').click(function(){ 23 $('body').removeClass('fixed').css({'top': 0}); 24 window.scrollTo( 0 , scrollPosition ); 25 26 $('.bl_panel').removeClass('panelactive'); 27 $('.bl_panel').scrollTop(0); 28 }); 29 30// 関数まとめ 31$(window).on('load', function() { 32 FixedAnime(); 33}); 34 35 36$(window).on('scroll', function() { 37 FixedAnime() ; 38});
試したこと
上記の通り$('.bl_panel').scrollTop(0);としました。
高さ500pxぐらいのブラウザ設定で、ハンバーガーメニュー内を一番下までスクロールしてMNU8をクリックし、再度メニューを開くと前回スクロールしたメニュー一番下のままで表示され、メニュー内のTOPが上に来ません。
超初心者なので分かりづらかったら申し訳ございません。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー