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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

Q&A

解決済

2回答

804閲覧

ハンバーガーメニュー開閉しない

xxxxx417

総合スコア1

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

1グッド

1クリップ

投稿2023/09/20 23:58

編集2023/09/21 23:33

実現したいこと

ハンバーガーメニューの実装

前提

発生している問題・エラーメッセージ

以下の動くWEBデザインのアイデア帳のハンバーガーメニューを参考に ハンバーガーを組んだのですが、開閉しません。 検証モードでopenbtn1をクリックすると、一瞬色が変わるのですがクラスactiveは追加されません。 クラス名がつきそうに光るのに、反応はないです…打ち消されているみたいな動きです。 https://coco-factory.jp/ugokuweb/move01/5-2-1/

該当のソースコード

html

1<div class="header_sp"> 2 <h1> 3 <a href="<?php echo home_url(); ?>"> 4 <p>キノマド</p> 5 <img src="<?php echo get_template_directory_uri(); ?>/img/common/logo.png" alt=""> 6 </a> 7 </h1> 8 <!-- <div class="toggle"> --> 9 <div class="openbtn1"><span></span><span></span><span></span></div> 10 <!-- </div> --> 11 <div class="header_sp_nav"> 12 <div class="header_sp_nav_inner"> 13 <ul class="nav_sp"> 14 <li><a href="<?php echo home_url(); ?>/archives/news/">NEWS</a></li> 15 <li><a href="<?php echo home_url(); ?>/topics/">TOPICS</a></li> 16 <li><a href="<?php echo home_url(); ?>/#sec_schedule">SCHEDULE</a></li> 17 <li><a href="<?php echo home_url(); ?>/event/">EVENT</a></li> 18 <li><a href="<?php echo home_url(); ?>/archives/films">FILMS</a></li> 19 <li><a href="<?php echo home_url(); ?>/#sec_about">ABOUT</a></li> 20 <li><a href="<?php echo home_url(); ?>/#sec_contact">CONTACT</a></li> 21 <li> 22 <ul class="nav_sp_sns"> 23 <li><a href=""><img src="<?php echo get_template_directory_uri(); ?>/img/common/sns_fb.png" alt=""></a></li> 24 <li><a href=""><img src="<?php echo get_template_directory_uri(); ?>/img/common/sns_inst.png" alt=""></a></li> 25 <li><a href=""><img src="<?php echo get_template_directory_uri(); ?>/img/common/sns_tw.png" alt=""></a></li> 26 <li><a href=""><img src="<?php echo get_template_directory_uri(); ?>/img/common/sns_mail.png" alt=""></a></li> 27 </ul> 28 </li> 29 </ul> 30 </div> 31 </div> 32 </div>

js

1$(document).ready(function () { 2 $(function () { 3 $(".openbtn1").click(function () { 4 $(this).toggleClass("active"); 5 }); 6 }); 7});

css

1.openbtn1 { 2 position: relative; /*ボタン内側の基点となるためrelativeを指定*/ 3 // background: #fff; 4 cursor: pointer; 5 width: 80px; 6 height: 80px; 7 top: 0px; 8} 9span { 10 display: inline-block; 11 transition: all 0.4s; /*アニメーションの設定*/ 12 position: absolute; 13 left: 22px; 14 height: 3px; 15 border-radius: 2px; 16 background: black; 17 width: 45%; 18} 19.openbtn1 span:nth-of-type(1) { 20 top: 24px; 21} 22.openbtn1 span:nth-of-type(2) { 23 top: 36px; 24} 25.openbtn1 span:nth-of-type(3) { 26 top: 49px; 27} 28/*activeクラスが付与されると線が回転して×に*/ 29// } 30.openbtn1.active { 31 background: transparent; 32} 33.openbtn1.active span:nth-of-type(1) { 34 top: 31px; 35 left: 26px; 36 transform: translateY(6px) rotate(-45deg); 37 width: 45%; 38} 39.openbtn1.active span:nth-of-type(2) { 40 opacity: 0; /*真ん中の線は透過*/ 41} 42.openbtn1.active span:nth-of-type(3) { 43 top: 44px; 44 left: 26px; 45 transform: translateY(-6px) rotate(45deg); 46 width: 45%; 47} 48 49.header_sp_nav { 50 display: none; 51 width: 100%; 52 height: 100%; 53 background: #f5f5f5; 54 position: absolute; 55 right: 0; 56 top: 90px; 57 &.active { 58 display: block; 59 } 60} 61.header_sp_nav_inner { 62 padding: 40px; 63} 64.nav_sp { 65 transition: 0.3s all ease; 66 a { 67 font-size: 2rem; 68 margin-bottom: 20px; 69 display: block; 70 text-decoration: none; 71 display: block; 72 margin-bottom: 7px; 73 color: #000; 74 transition: 0.3s all ease; 75 font-family: "Oswald", sans-serif; 76 &::viseited { 77 color: #000; 78 } 79 &:hover { 80 text-decoration: underline; 81 } 82 } 83} 84 85.nav_sp_sns { 86 display: flex; 87 justify-content: space-between; 88 width: fit-content; 89 gap: 5px; 90 margin: 40px 0; 91 li { 92 display: flex; /* 追加 */ 93 align-items: center; /* 追加 */ 94 width: 30px; 95 height: 30px; 96 background: #222; 97 border-radius: 4px; 98 transition: 0.3s all ease; 99 margin-right: 20px; 100 text-align: center; 101 a { 102 display: flex; 103 justify-content: center; 104 align-items: center; 105 text-decoration: none; 106 text-align: center; 107 padding: 2px; 108 width: 100%; 109 margin-bottom: 0; 110 img { 111 height: 20px; 112 } 113 } 114 &:hover { 115 transform: scale(1.1); 116 } 117 } 118}

試したこと

・toggleClassは反応しないのですが、
addClassでactiveは追加されました。
・検証モードでactiveを追加するとcssは反映されます。

補足情報(FW/ツールのバージョンなど)

9月21日22時40分
ご回答いただいたコードで修正→変化なし
コピペで実装できる他のハンバーガーメニューを実装→反応せず
jQueryを使わないコードに書き換え→変化なし
ハンバーガーの位置を変更→変化なし
別の媒体で検証→変化なし

ほかに検証すべきことがわかる方いましたらお願いいたします。

shinoharat👍を押しています

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

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

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

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

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

Lhankor_Mhy

2023/09/21 02:17

ご提示のコードを試してみましたが、クリックすると .openbtn1 に .active がつき、ハンバーガーメニューが×印になりました。ですので、問題が再現しません。
shinoharat

2023/09/21 05:04

toggleClass が呼ばれていないのか、それとも2回呼び出されたせいで元に戻っているのかの切り分けがしたいです。 $(this).toggleClass("active"); の直後に console.log("----- toggle!! -----"); みたいなコードを書くと、ログはどんな感じででますか?
pecmm

2023/09/21 14:15

問題点が若干不明瞭なんですが、「開閉しません」というのは 『openbtn1ボタンにactiveクラスが付与されず、見た目が変化しない』という意味ですか? それとも『header_sp_nav辺りのメニューが表示されない』という話ですか? 現状のコードでは 1. ユーザがopenbtn1ボタンをクリックする 2. ボタンのactiveクラスがtoggleし、ボタンの見た目が変化する …というのは書いてある通りに正常に実行されそうな気がします。 もしopenbtn1ボタンのtoggleがうまくいかないという話であれば、 検証環境を詳細に書いた方がよりよい回答が得られるかもしれません
xxxxx417

2023/09/21 15:28 編集

すみません、初めてこのサイトを使うもので、こちらに質問いただいているのに気がつきませんでした。 >Lhankor_Mhyさん お試しありがとうございます。私も別の環境で試すとうまくいきました。 >shinoharatさん 記載すると、consoleに表示されました。 >pecmmさん 『openbtn1ボタンにactiveクラスが付与されず、見た目が変化しない』という意味の方です。 他サイトで動いているコードを持ってきて検証してみました クラス名などもそっくり持ってきて、そのサイトで使用されていた以下のようなコードを試すと、 toggleClassは全て反応せず、if内だけ反応しました。 $(function () { var state = false; $('#btn').on('click', function () { $('.header_toggle').toggleClass('open'); $('.toggle_title').toggleClass('open'); $('.sp_only_nav').toggleClass('open'); $('html,body').toggleClass('noscroll'); if (state == false) { $('.toggle_title').text('CLOSE'); state = true; } else { $('.toggle_title').text('MENU'); state = false; } return false; }); }); }); 現在のサイトもtoggleClass部分をaddClassに変更すると動作します。 Macbook Chrome、Safari、iphoneSE Safari、Chromeでダメでした。 テスト環境で公開しているので、こちらに記載しても大丈夫か確認してみます。
guest

回答2

0

ベストアンサー

コードについて

現状提示されているコードでは、特に問題なくtoggleClassが実行されそうです。
ただ、htmlの中にPHPの断片が見えることなどから、実際に手元で検証されているコードとは別物なのではないでしょうか。
もしそうであれば、本当に動作しているコードを見てみないことにはこれ以上はなんとも言えないです。
(「ちゃんと動きそうなのに」以外の回答は難しそうです)

想像できる原因

あくまで可能性ですが、本当に動作しているコードでは何らかの手段でクリックイベントを二重に登録している説があります。
そうであれば
「検証モードでopenbtn1をクリックすると、一瞬色が変わるがクラスactiveは追加されない」
「toggleClassは(一見)動作しないが、addClassは動作する」
「ログ出力を追加するとconsoleに表示される」
どれも矛盾なく説明できます。

console出力ですが、最近の開発者コンソールは「全く同じ出力が連続した場合、表示は1回のみで横に出力された回数が表示される」ような挙動のものが多いです。
ですので1回ボタンクリックで実は2回出力されており、以降クリックごとに 4→6→8…とカウントアップしていくような挙動であれば、二重登録が原因でしょう。

些細な指摘

(若干今更ですが)
ソースコードを提示する場合は、言語の種類ごとにマークダウンを分ける&言語も指定すると把握し易いです。
質問の編集で </> マークのボタン(コードの挿入) で、バッククォート3連直後の「ここに言語を入力」のテキストを html とか css とかに書き換えると、そこで指定した言語に合わせてハイライトが付きます。

投稿2023/09/21 23:15

pecmm

総合スコア760

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

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

xxxxx417

2023/09/21 23:42

pecmmさん ご回答ありがとうございます! ご指摘のとおり、二重に読み込まれているせいでtoggleが打ち消されているのが原因でした。 今回初めて自力でWordPressのテーマを作成していたのですが、いろんな場所から参考コードを持ってきた結果、 function.phpにも読み込みコードを書き、footerにも同じものを書いていました。 そのせいで二重に読み込まれてしまったようでした。 よく見るとconsoleにもcommon.jsとcommon.js???ver01のようなjs由来で二重に記載されていたのですが、2回読み込んでいるという概念がなくて見落としていました。 なぜ動かないのか本当に本当に困っていたので、本当に大変助かりました。感謝申し上げます!! ソースコードについてもご指摘ありがとうございます。 今後も質問投稿するかと思うので、ご指摘のやり方で修正してみました。 こうやってやるんですね、勉強になりました。
guest

0

$(document).ready( ... ) が2重になっているせいで、「準備が完了したら準備完了を待つ」みたいなコードになっていると思います。

js

1 // 修正前 2 // 1つめのready 3 $(document).ready(function () { 4 // 2つめのready 5 $(function () { 6 // click時の処理を登録 7 $(".openbtn1").click(function () { 8 $(this).toggleClass("active"); 9 }); 10 }); 11 });

以下のように外側の ready を消してみてください。

js

1 // 修正後 2 // 1つめのready 3 $(function () { 4 // click時の処理を登録 5 $(".openbtn1").click(function () { 6 $(this).toggleClass("active"); 7 }); 8 });

投稿2023/09/21 05:26

shinoharat

総合スコア1685

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

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

xxxxx417

2023/09/21 11:49

shinoharatさん ご回答ありがとうございます。 訂正してみましたが、残念ながらやっぱり動きませんでした…;; 読み込みもされているようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問