🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

11259閲覧

ハンバーガーメニューが閉じている状態なのに、中のリンクが押せてしまう。

keiichi5336

総合スコア16

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/08/22 13:58

前提・実現したいこと

コーディングについて勉強中なのですが、ハンバーガーメニューについて困ったことがあり、対応策が分からずこちらにご質問させていただきます。

【実現したいこと】
1.ハンバーガーメニューが閉じている状態でもなぜかリンク先が押せてしまうので改善したい。(ハンバーガーメニューを閉じている状態の時、リンクの文字は見えないが、マウスを画面上部に持っていくとhoverになり押せてしまう。)
2.リンクをクリック後、リンク先に飛び、自動的にハンバーガーメニューが閉じるようにしたい。

該当のソースコード

HTML

1 <header> 2 <h1 class="sp">UNIQUE</h1> 3 <div class="pc"> 4 <div> 5 <h1>UNIQUE</h1> 6 <ul> 7 <li><a href="#01">The Work</a></li> 8 <li><a href="#02">About Me</a></li> 9 <li><a href="#03">What can i do</a></li> 10 <li><a href="#04">Contact</a></li> 11 </ul> 12 </div> 13 </div> 14 15 <!--ハンバーガーメニュー--> 16 <div class="hamburger sp"> 17 <span></span> 18 <span></span> 19 <span></span> 20 </div> 21 22 <nav class="globalMenuSp sp"> 23 <ul id="menu"> 24 <li><a href="#01">Menu1</a></li> 25 <li><a href="#02">Menu2</a></li> 26 <li><a href="#03">Menu3</a></li> 27 <li><a href="#04">Menu4</a></li> 28 </ul> 29 </nav> 30 31 </header>

css

1header { 2 position: fixed; 3 width: 100%; 4 z-index: 100; 5} 6 7header > div.pc { 8 width: 100%; 9} 10 11header > div:first-of-type div { 12 display: flex; 13 flex-wrap: wrap; 14 width: 100%; 15 justify-content: space-between; 16 align-items: center; 17 padding: 0 3rem; 18 background-color: #9e9e9e; 19} 20 21header > div:first-of-type div h1 { 22 width: calc((100% - 2rem) / 10 * 2); 23 vertical-align: middle; 24} 25 26header > div:first-of-type div h1 { 27 font-size: 2.8rem; 28 padding: 2rem; 29} 30 31 32 33header > div:first-of-type div ul { 34 display: flex; 35 flex-wrap: wrap; 36 width: calc((100% - 2rem) / 10 * 8); 37 justify-content: flex-end; 38} 39 40header > div:first-of-type div ul li a { 41 font-size: 1.4rem; 42 padding: 1rem 1rem; 43 display: inline-block; 44} 45 46 47 48 49 50 51@media screen and (max-width: 768px) { 52 53 header { 54 background-color: #9e9e9e; 55 } 56 57 header > h1 { 58 font-size: 2.8vw; 59 padding: 3.5vh 3vw; 60 } 61 62 /* ハンバーガーボタン */ 63 .hamburger { 64 display: block; 65 position: fixed; 66 z-index: 3; 67 right: 13px; 68 top: 12px; 69 width: 42px; 70 height: 42px; 71 cursor: pointer; 72 text-align: center; 73 } 74 75 .hamburger span { 76 display: block; 77 position: absolute; 78 width: 30px; 79 height: 2px; 80 left: 6px; 81 background: #555; 82 -webkit-transition: 0.5s ease-in-out; 83 -moz-transition: 0.5s ease-in-out; 84 transition: 0.5s ease-in-out; 85 } 86 87 .hamburger span:nth-child(1) { 88 top: 10px; 89 } 90 91 .hamburger span:nth-child(2) { 92 top: 20px; 93 } 94 95 .hamburger span:nth-child(3) { 96 top: 30px; 97 } 98 99 /* ナビ開いてる時のボタン */ 100 .hamburger.active span:nth-child(1) { 101 top: 16px; 102 left: 6px; 103 background: #fff; 104 -webkit-transform: rotate(315deg); 105 -moz-transform: rotate(315deg); 106 transform: rotate(315deg); 107 } 108 109 .hamburger.active span:nth-child(2), 110 .hamburger.active span:nth-child(3) { 111 top: 16px; 112 background: #fff; 113 -webkit-transform: rotate(-315deg); 114 -moz-transform: rotate(-315deg); 115 transform: rotate(-315deg); 116 } 117 118 nav.globalMenuSp { 119 position: fixed; 120 z-index: 2; 121 top: 0; 122 left: 0; 123 color: #fff; 124 background: rgba(0, 0, 0, 0.7); 125 text-align: center; 126 width: 100%; 127 opacity: 0; 128 transition: opacity .6s ease, visibility .6s ease; 129 } 130 131 nav.globalMenuSp ul { 132 margin: 0 auto; 133 padding: 0; 134 width: 100%; 135 } 136 137 nav.globalMenuSp ul li { 138 list-style-type: none; 139 padding: 0; 140 width: 100%; 141 transition: .4s all; 142 } 143 144 nav.globalMenuSp ul li:last-child { 145 padding-bottom: 0; 146 } 147 148 nav.globalMenuSp ul li:hover { 149 background: #ddd; 150 } 151 152 nav.globalMenuSp ul li a { 153 display: block; 154 color: #fff; 155 padding: 1em 0; 156 text-decoration: none; 157 } 158 159 /* このクラスを、jQueryで付与・削除する */ 160 nav.globalMenuSp.active { 161 opacity: 100; 162 163 } 164}

javascript

1<script> 2 jQuery(function() { 3 jQuery('.hamburger').click(function() { 4 jQuery(this).toggleClass('active'); 5 6 if (jQuery(this).hasClass('active')) { 7 jQuery('.globalMenuSp').addClass('active'); 8 9 } else { 10 jQuery('.globalMenuSp').removeClass('active'); 11 } 12 }); 13 }); 14</script>

試したこと

1.ハンバーガーメニューが閉じている状態の時にリンクが押せてしまう件についてはGoogleでも検索しましたが解決策が見当たりませんでした。

2.リンクをクリック後、ハンバーガーメニューを閉じる方法を探し、下記のソースコードでおそらく実現可能ではないかと判断しました。しかし、ソースコードの入力場所が違うのか、どこに入れても目標とする動きが無かったので困っています。

javascript

1jQuery('#manu a[href]').on('click', function(event) { 2 jQuery('.hamburger').trigger('click'); 3 });

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

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

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

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

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

guest

回答1

0

ベストアンサー

1.ハンバーガーメニューが閉じている状態の時にリンクが押せてしまう件についてはGoogleでも検索しましたが解決策が見当たりませんでした。

失礼、以前反応しないと書きましたが、ハンバーガーボタンが表示される状態にしてからクリックしたら反応しました。
原因ですが、opacityを0にして透明になっていても、onclickイベントを拾ってしまうためです。同時にvisibilityもhiddenに変更してください。表示するさいには、opacityを100にするだけでなく、visibilityもvisibleに変更してください。

CSS

1 nav.globalMenuSp { 2 () 3 visibility: hidden; 4 } 5 6 nav.globalMenuSp.active { 7 opacity: 100; 8 visibility: visible; 9 }

2.リンクをクリック後、ハンバーガーメニューを閉じる方法を探し、下記のソースコードでおそらく実現可能ではないかと判断しました。しかし、ソースコードの入力場所が違うのか、どこに入れても目標とする動きが無かったので困っています。

こちらは単なる打ち間違いです(menuがmanuになっている)。修正したものを、提示されているひとつめのJavaScriptコードのjQuery(function() { ... }の中に配置してください。

Diff

1-jQuery('#manu a[href]').on('click', function(event) { 2+jQuery('#menu a[href]').on('click', function(event) {

投稿2020/08/23 02:04

編集2020/08/23 12:07
Daregada

総合スコア11990

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

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

keiichi5336

2020/08/23 08:08

ご回答ありがとうございます。2つめ目のリンククリック後、ハンバーガーメニュー自動閉じについては動作しましたので解決いたしました。 本題であるハンバーガーメニューが閉じている状態でクリックができる現象についてですが、私が使っているOSはMac OSで、ブラウザはクロームを使っております。
keiichi5336

2020/08/23 12:26

Daregada様、ご回答ありがとうございます! 教えていただいた内容で無事に解決することができました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問