前提・実現したいこと
ハンバーガーメニューのリンクからページ内リンク、スムーズスクロールを設定しています。ハンバーガーメニュー内のリンクをクリックし、移動すると同時にハンバーガーメニューを閉じたいと考えています。
ハンバーガーメニューのHTML、CSS、JavaScriptは一部ネットからのコピペがあります。他にも調べたのですが閉じるための記述が現状分かりません。
おそらく、<li class="nav-item">の中のaタグをクリックした時にJavaScriptで付与した.nav-openのクラスを削除するという動きだとは思うのですが、どのように記述すればいいか教えていただきたいです。
該当のソースコード
HTML
1<nav class="nav"> 2 <ul class="nav-list"> 3 <li class="nav-item"><a href="#campaign">campaign<span class="jp">キャンペーン</span></a></li> 4 <li class="nav-item"><a href="#point">point<span class="jp">店舗の強み</span></a></li> 5 <li class="nav-item"><a href="#facility">facility<span class="jp">施設紹介</span></a></li> 6 <li class="nav-item"><a href="#price">price<span class="jp">料金案内</span></a></li> 7 <li class="nav-item"><a href="#faq">faq<span class="jp">よくあるご質問</span></a></li> 8 <li class="nav-item"><a href="#access">access<span class="jp">アクセス</span></a></li> 9 </ul> 10 11 <ul class="btn-list"> 12 <li class="btn-item"><a href="">WEB入会はこちら</a></li> 13 <li class="btn-item"><a href="">見学・体験予約はこちら</a></li> 14 <li class="btn-item"><a href="">お問い合わせ</a></li> 15 </ul> 16</nav> 17 18<div class="hamburger" id="js-hamburger"> 19 <span class="hamburger__line hamburger__line--1"></span> 20 <span class="hamburger__line hamburger__line--2"></span> 21 <span class="hamburger__line hamburger__line--3"></span> 22</div> 23<div class="black-bg" id="js-black-bg"></div> 24
CSS
1.nav { 2 position: fixed; 3 right: -320px; 4 top: 0; 5 width: 300px; 6 height: 100vh; 7 padding-top: 40px; 8 background-color: #fff; 9 transition: all .6s; 10 z-index: 200; 11 overflow-y: auto; 12} 13.hamburger { 14 position: absolute; 15 right: 0; 16 top: 0; 17 width: 40px; 18 height: 40px; 19 cursor: pointer; 20 z-index: 300; 21} 22.nav-list { 23 margin: 0; 24 padding: 0; 25 list-style: none; 26} 27.nav-item { 28 text-align: center; 29 padding: 0 14px; 30} 31.nav-item a { 32 display: block; 33 padding: 8px 0; 34 border-bottom: 1px solid #eee; 35 text-decoration: none; 36 color: #111; 37} 38.nav-item a:hover { 39 background-color: #eee; 40} 41.hamburger__line { 42 position: absolute; 43 left: 11px; 44 width: 18px; 45 height: 1px; 46 background-color: #111; 47 transition: all .6s; 48} 49.hamburger__line--1 { 50 top: 14px; 51} 52.hamburger__line--2 { 53 top: 20px; 54} 55.hamburger__line--3 { 56 top: 26px; 57} 58.black-bg { 59 position: fixed; 60 left: 0; 61 top: 0; 62 width: 100vw; 63 height: 100vh; 64 z-index: 100; 65 background-color: #000; 66 opacity: 0; 67 visibility: hidden; 68 transition: all .6s; 69 cursor: pointer; 70} 71 72 73.nav-open .global-nav { 74 right: 0; 75} 76.nav-open .black-bg { 77 opacity: .8; 78 visibility: visible; 79} 80.nav-open .hamburger__line--1 { 81 transform: rotate(45deg); 82 top: 20px; 83} 84.nav-open .hamburger__line--2 { 85 width: 0; 86 left: 50%; 87} 88.nav-open .hamburger__line--3 { 89 transform: rotate(-45deg); 90 top: 20px; 91} 92 93/*ページ内リンク位置調整(ヘッダーの高さ分)*/ 94.anchor{ 95 display: block; 96 padding-top: 60px; 97 margin-top: -60px; 98} 99
JavaScript
1//ハンバーガーメニュー 2function toggleNav() { 3 var body = document.body; 4 var hamburger = document.getElementById('js-hamburger'); 5 var blackBg = document.getElementById('js-black-bg'); 6 7 hamburger.addEventListener('click', function() { 8 body.classList.toggle('nav-open'); 9 }); 10 blackBg.addEventListener('click', function() { 11 body.classList.remove('nav-open'); 12 }); 13 14} 15toggleNav(); 16 17//ページ内リンク 18$(function(){ 19 $('a[href^="#"]').click(function(){ 20 var speed = 500; 21 var href= $(this).attr("href"); 22 var target = $(href == "#" || href == "" ? 'html' : href); 23 var position = target.offset().top; 24 $("html, body").animate({scrollTop:position}, speed, "swing"); 25 return false; 26 }); 27 28});
補足情報(FW/ツールのバージョンなど)
参考にしたサイトです。```https://tech-dig.jp/hamburger-global-nav/
### 試したこと aタグにclass="close"を追加し、JavaScriptでclass="close"を取得しリンクをクリックした時に.nav-openのクラスを削除しハンバーガーメニューを閉じる。 これを試してみましたがエラーが出てしまいました。コードの書き方など間違っている可能性があります。 エラー↓ index.html:437 Uncaught TypeError: target.addEventListener is not a function at toggleNav (index.html:437)at index.html:442 変更点↓ css <li class="nav-item"><a href="#campaign" class="close">campaign<span class="jp">キャンペーン</span></a></li> JavaScript function toggleNav() { var body = document.body; var hamburger = document.getElementById('js-hamburger'); var blackBg = document.getElementById('js-black-bg'); hamburger.addEventListener('click', function() { body.classList.toggle('nav-open'); }); blackBg.addEventListener('click', function() { body.classList.remove('nav-open'); }); //追加したコード let target = document.getElementsByClassName('close'); target.addEventListener('click', function() { body.classList.remove('nav-open'); }); } toggleNav();