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

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

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

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

HTML

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

Q&A

解決済

1回答

1164閲覧

ハンバーガーメニューを「閉じる」ボタンで閉じたい

yasu1110

総合スコア15

jQuery

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

HTML

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

0グッド

0クリップ

投稿2018/11/04 04:28

バーガーメニューを閉じたいのですが、方法がわかりません。
単純にメニューの中に「閉じる」項目を作り、それを押したら閉じる仕組みです。
リンク先を'#'にしたのですが、メニューは閉じませんでした。
ご教示お願い致します。

html

1<div class="sp sp_navi"> 2 <img id="sp_navi_btn" class="u-max-full-width" src="img/sp_navi.png" alt="sp_navi" srcset="img/sp_navi@2x.png 2x" /> 3 4 <ul class="sp_navi_li"> 5 <li><a href="index.html">TOPページ</a></li> 6 <li><a href="sp_lesson.html">内容</a></li> 7 <li><a href="faq.html">内容</a></li> 8<li><a href="sp_voice.html">内容</a></li> 9 <li><a href="company.html">内容</a></li> 10 <li><a href="contact.html">内容</a></li> 11 <li><a href="#">閉じる</a></li> 12 </ul> 13</div>

jquery

1<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> 2<script> 3 $('.container').click(function(){ 4$('.sp_navi').removeClass('sp_navi_li'); 5}); 6 7 $(function(){ 8 $(document).ready(function(){ 9 10 $("#sp_navi_btn").click(function () { 11 $(this).next().slideToggle(); 12 }); 13 14 }); 15 }); 16</script>

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

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

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

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

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

m.ts10806

2018/11/04 04:43

どこにも「閉じるを押したら」の処理が書かれていないことは認識済みですか?そもそも元々どうなったら閉じるときに作られていますか?そこが分かれば同じ処理を呼び出すだけかと思います。
yasu1110

2018/11/04 04:48

すみません、なにぶん知識が少なくて。。「リンクを押したらメニューが消える」というアクションが必要ということでしょうか?考えていた閉じ方は、バーガーメニュー内の「閉じる」リンクを押したらメニューが消えるイメージです。
m.ts10806

2018/11/04 04:55

提示htmlにcontainerがないので全て把握できるわけではないですけど、「リンクを押したら」ではなく「閉じるを押したら」です(最初にそう書いたつもりですが)まずは「閉じるを押した」というclickイベントを取得するように書いてみてください。もう1つ、コメントの後半に書いてますが、「メニューが閉じる」は今の状態でどこで対応していますか?それともそもそも閉じる自体ない状態ですか?
guest

回答1

0

ベストアンサー

いろいろコメントで確認はしていますが、失礼ながら、おそらく提示のコードをあまり理解せずに使われているように思われますので、ざっと気になった点とあくまで1案として回答します。

ちょっと細かいですが。
画像がどのようなものかわからないですが、動きを見た感じ「ハンバーガーメニュー」ではなく普通の「ドロップダウンメニュー」ではないでしょうか。
画像次第ですけど、「ハンバーガーメニュー」は確かメニューのボタンが横の三本線になっているもの、そのボタン自体のことを言ったような。
機能的には「ドロップダウンメニュー」かなと。

  • 「閉じるを押す」イベント自体が書かれていない

提示のJavaScriptコードの「click」で指定されている処理が「クリック時の処理」ですが、
見たところclass="container"をクリックしたときとid="sp_navi_btn"をクリックしたときの処理しかありません。
containerの方はhtmlの提示がないためどうなっているかわかりませんが、コードを読んだ限りだと、sp_navi_btnクリック時にその次の要素をslideToggle()するように書かれていますね。
slideToggle()はslideDown/slideUpを切り替えるものdす。
ここでメニューの開閉が行われています。

  • 冗長な処理がある

下記は結局同じことが繰り返し書いてあるだけのように思います。
1つだけで良いです。

js

1 $(function(){ 2 $(document).ready(function(){

jQueryの基本 - $(document).ready

上記3つの書き方も同じ動作をします。HTMLの読み込みが終わった時点で //なにかしらの処理 が実行されます。

  • click直接よりonから呼び出したほうが良い

jQuery 便利なonを使おう(on click)

あと既に開閉の仕組みが組まれているので同じ物を使いまわしたいですよね。
jQueryでは複数の要素に対して同じイベントを拾うように書けます。
[JS]jQuery で複数の要素に同じ処理をする方法

上記を踏まえて、また「閉じる」をきちんと認識するためにhtmlにも若干変更を加えるとこんな感じになるかなと。
(あくまで1つのやり方です。これだけが唯一ではありません)

html

1<li><a href="#" class="close">閉じる</a></li>

js

1 $(function(){ 2 $("#sp_navi_btn,.close").click(function () { 3 $("#sp_navi_btn").next().slideToggle(); 4 }); 5 $('.container').click(function(){ 6 $('.sp_navi').removeClass('sp_navi_li'); 7 }); 8 }); 9

*一応動作確認済みですが、想定通りのものと違う場合、参考に色々やってみてください。

投稿2018/11/04 05:40

m.ts10806

総合スコア80850

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

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

yasu1110

2018/11/05 15:02

お礼が遅くなり申し訳ありません。 また大変丁寧にご教示くださり、ありがとうございました。 改めて基礎から勉強してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問