前提・実現したいこと
ハンバーガーメニューを閉めた時に、スクロールした所と同じ場所で閉じれるようにしたいのですが、どうやっても一番上に戻ってしまうので、何かアドバイスいただけたら嬉しいです。
該当のソースコード
html
1<header> 2 <div id="headerTop"> 3 4 <div id="headerTopContent"> 5 <h2 id="logo">Shiro</h2> 6 7 <a href="#" id="menuButton"> 8 <div class="bar"></div> 9 <div class="bar"></div> 10 <div class="bar"></div> 11 </a> 12 13 <nav id="nav"> 14 <ul> 15 <li><a href="#">menu1</a></li> 16 <li><a href="#">menu2</a></li> 17 <li><a href="#">menu3</a></li> 18 <li><a href="#">menu4</a></li> 19 <li><a href="#">menu5</a></li> 20 </ul> 21 </nav> 22 </div> 23 </div> 24 <h1>ロゴ</h1> 25 <p>キャプション</p> 26 </header>
css
1#headerTop { 2 width: 100%; 3 height: 65px; 4 position: absolute; 5 top: 40px; 6 left: 0; 7} 8#headerTop.pst-change{ 9 position: fixed; 10 top: 0; 11} 12#headerTopContent { 13 width: 70%; 14 height: 100%; 15 margin: auto; 16 display: flex; 17 justify-content: space-between; 18 align-items: center; 19 position: relative; 20} 21#menuButton { 22 display: inline-block; 23 height: 35px; 24 width: 35px; 25 position: relative; 26 z-index: 2; 27} 28 29.bar { 30 height: 1px; 31 width: 60%; 32 background-color: white; 33 position:absolute; 34 top: 50%; 35 left: 50%; 36 transform: translate(-50%, -50%); 37 transition: 0.3s; 38} 39.bar:nth-of-type(1){ 40 transform: translate(-50%, -5px); 41} 42.bar:nth-of-type(3){ 43 transform: translate(-50%, 5px); 44} 45 46#menuButton.active div:nth-of-type(1){ 47 transform: rotate(45deg) translate(-36%, 14px); 48} 49#menuButton.active div:nth-of-type(2){ 50 opacity: 0; 51} 52#menuButton.active div:nth-of-type(3){ 53 transform: rotate(-45deg) translate(-69%, -8px); 54} 55 56#nav { 57 height: 1400px; 58 opacity: 0; 59 visibility: hidden; 60 transition: 0.3s; 61 position: absolute; 62 z-index: 100; 63 top: 26px; 64 right: -200px; 65 bottom: 0; 66 left: -200px; 67 background-color: rgba(255, 255, 255, .9); 68 text-align: center; 69 margin-top: 40px; 70} 71#nav a { 72 color: black; 73} 74#nav li{ 75 border-bottom: 1px solid #CCCCCC; 76 font-size: 18px; 77 color: #2B2B2B; 78 padding: 80px 0; 79 z-index: 20; 80} 81 82#nav.active { 83 opacity: 1; 84 visibility: visible; 85} 86#headerTop.scroll-nav { 87 background-color: white; 88 border-bottom: 1px solid grey; 89} 90#logo.scroll-nav { 91 color: black; 92 background: white; 93} 94.bar.show { 95 background-color: black; 96}
JavaScript
1'use strict'; 2{ 3 const btn = document.getElementById("menuButton"); 4 const nav = document.getElementById("nav"); 5 6 btn.addEventListener("click", () => { 7 btn.classList.toggle("active"); 8 nav.classList.toggle("active"); 9 }); 10 11 document.addEventListener("scroll", () => { 12 13 const scrollY = window.scrollY; 14 const menu = document.getElementById("headerTop"); 15 const logo = document.getElementById("logo"); 16 const btn = document.getElementById("menuButton"); 17 const headerTop = document.getElementById("headerTop"); 18 19 menu.classList.toggle("scroll-nav", scrollY > 350); 20 logo.classList.toggle("scroll-nav", scrollY > 350); 21 btn.classList.toggle("scroll-nav", scrollY > 350); 22 showBar(); 23 headerTop.classList.toggle("pst-change", scrollY > 40); 24 }); 25 26 function showBar() { 27 const bar = document.querySelectorAll(".bar"); 28 bar.forEach(function (bars) { 29 if(scrollY > 350){ 30 bars.classList.add("show"); 31 }else{ 32 bars.classList.remove("show"); 33 } 34 }); 35 } 36} 37
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/14 08:23