質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

1465閲覧

【ハンバーガーメニュー】ページ内リンクをクリックで、メニューを閉じたい

napoli_mk

総合スコア1

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/12/02 16:27

【ハンバーガーメニュー】ページ内リンクをクリックで、メニューを閉じたい

実現したいこと:
ハンバーガーメニュー内の各項目をクリックすると、ハンバーガーメニューが閉じるようにしたいです。

現状:
ページ内リンクを設定している箇所(PROFILE)だけ、クリックしてもハンバーガーメニューが閉じません。
同様の質問を参考に試してみましたが、実現できませんでした。

質問:
jsの
①どの箇所に
②どのような記述を
すれば、上記の動作が可能になるでしょうか。

サイト作成自体が初めてのため粗が多いのですが、お教えいただければ幸いです。

該当のソースコード

HTML

1 <div class="hamburger"><!-- ハンバーガーの3本線--> 2 <span></span> 3 <span></span> 4 <span></span> 5 </div> 6 <nav class="globalMenuSp"><!-- ハンバーガー内のナビ--> 7 <ul class="nav-wrap"> 8 <li class="li-works">WORKS</li> 9 <ul class="works-wrap"><!-- WORKS子カテゴリ --> 10 <li><a href="">WEB CONTENTS</a></li> 11 <li><a href="">FLYER</a></li> 12 <li><a href="">WRITING</a></li> 13 </ul> 14 <li class="li-profile"><a href="#profile">PROFILE</a></li> 15 <li class="li-top"><a href="">TOP</a></li> 16 </ul> 17 </nav>

CSS

1/*ここからハンバーガーボタン*/ 2.hamburger { /*ボタンのベース*/ 3 display: block; 4 position: absolute; 5 width: 42px; 6 height: 42px; 7 z-index: 3; 8 cursor: pointer; 9} 10 11.hamburger span { /*ボタンの3本線*/ 12 display: block; 13 position: absolute; 14 width : 30px; 15 height: 1px; 16 left : 6px; 17 background: #fff; 18 transition: 0.3s ease-in-out; 19} 20 21.hamburger span:nth-child(1) {top: 10px;}/* hamburger中の1番目の <span> 要素をtopから10px */ 22.hamburger span:nth-child(2) {top: 20px;} 23.hamburger span:nth-child(3) {top: 30px;} 24 25/* ナビ開いている時のボタン */ 26.hamburger.active span:nth-child(1){ 27 background: #fff; 28 top: 16px; 29 left: 6px; 30 transform: rotate(-45deg); 31} 32.hamburger.active span:nth-child(2), 33.hamburger.active span:nth-child(3) { 34 background: #fff; 35 top: 16px; 36 transform: rotate(45deg); 37} 38 39/* 70pxスクロールを起点に、このクラスをjQueryで付与・削除する */ 40.hamburger.change-color span { 41 background: #222; 42}/*ここまでハンバーガーボタン*/ 43 44/*ここからnav*/ 45nav.globalMenuSp { 46 position: fixed; 47 z-index : 2; 48 top : 0; 49 left : 0; 50 text-align: center; 51 transform: translateX(100%); 52 transition: all 0.6s; 53 width: 100%; 54 height: 100vh; 55} 56 57nav.globalMenuSp .nav-wrap { 58 background: rgba(30,30,30,0.95); 59 margin: 0; 60 padding: 0; 61 width: 100%; 62 height: 100vh; 63 display: -webkit-box; 64 display: -ms-flexbox; 65 display: flex; /* 要素をflexboxに対応させる */ 66 align-items: center; /* 縦方向の中央揃え */ 67 justify-content: center; /* 横方向の中央揃え */ 68 flex-direction: column; /* 子要素の並びを上から下にする(要素の改行に対応) */ 69} 70 71/* このクラスを、jQueryで付与・削除する */ 72nav.globalMenuSp.active { 73 transform: translateX(0%); 74}

jQuery

1$(function() { 2 $('.hamburger').click(function() { 3 $(this).toggleClass('active'); 4 5 if ($(this).hasClass('active')) { 6 $('.globalMenuSp').addClass('active'); 7 } else { 8 $('.globalMenuSp').removeClass('active'); 9 } 10 }); 11});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

javascript

1<style> 2.hamburger:not(.active):after{ 3content:"\02261"; 4} 5.hamburger.active:after{ 6content:"\0d7"; 7} 8.hamburger:not(.active) ~ .globalMenuSp{ 9display:none; 10} 11</style> 12<script> 13document.addEventListener('click',e=>{ 14 const t=e.target; 15 if(t.closest('.hamburger')){ 16 t.classList.toggle('active'); 17 } 18 if(t.closest('.globalMenuSp a') || 19 !t.closest('.globalMenuSp,.hamburger')){ 20 document.querySelector('.hamburger').classList.remove('active'); 21 } 22}); 23</script> 24<div class="hamburger"></div> 25<nav class="globalMenuSp"><!-- ハンバーガー内のナビ--> 26 <ul class="nav-wrap"> 27 <li class="li-works">WORKS</li> 28 <ul class="works-wrap"><!-- WORKS子カテゴリ --> 29 <li><a href="#content">WEB CONTENTS</a></li> 30 <li><a href="#flyer">FLYER</a></li> 31 <li><a href="#writing">WRITING</a></li> 32 </ul> 33 <li class="li-profile"><a href="#profile">PROFILE</a></li> 34 <li class="li-top"><a href="#top">TOP</a></li> 35 </ul> 36</nav>

投稿2021/12/03 03:44

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず、CSSの下記の部分を

css

1/* このクラスを、jQueryで付与・削除する */ 2nav.globalMenuSp.active { 3 transform: translateX(0%); 4}

下記のように修正します。

css

1.hamburger.active + nav.globalMenuSp { 2 transform: translateX(0%); 3}

+はすぐ後の要素を指定します。
隣接兄弟結合子 - CSS: カスケーディングスタイルシート | MDN

これで、ハンバーガーメニューのみのactiveクラスの付け外しで動作するようになるので、jQueryがシンプルになります。

その上で、ナビのa要素のクリックでも反応するようにjQueryを書き換えればいいでしょう。

js

1$(function() { 2 $('.hamburger, .globalMenuSp a').click(function() { 3 $('.hamburger').toggleClass('active'); 4 }); 5});

投稿2021/12/02 23:42

編集2021/12/02 23:46
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

napoli_mk

2021/12/06 08:12

返信が遅くなり申し訳ありません。 初心者の私でも分かるシンプルな回答で、大変助かりました。 この度はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問