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

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

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

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

HTML

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

CSS

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

Q&A

解決済

1回答

1246閲覧

【jquery】ドロップダウンとアコーディオンの切り替えがうまくいきません

arin1128

総合スコア4

jQuery

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2022/02/02 02:08

jquery初心者です。
サブメニューのあるグローバルナビゲーションを作成しています。
PC表示の時はマウスホバーでサブメニューをドロップダウン、
スマホ(タブレット)表示の時はハンバーガーメニューにして、サブメニューをクリックでアコーディオンで表示させたいです。
自分なりに作ってみたのですが、画面をリサイズした時にPC、スマホ共にドロップダウンとアコーディオンの両方が作動しており、うまくいきません。色々調べたのですが、一向に解決せず困っております。
ちなみに画面リサイズ前のブラウザ初回起動時にはうまくいっております。
画面リサイズ時に、初回起動時と同じ動きをさせたいです。
ご教授いただければと思います。

はじめて投稿するので、勝手がよくわからず、何か質問に不備がありましたらすみません。

HTML

1 <nav class="gnav"> 2 <ul class="menu"> 3 <li> 4 <a href="#">メニュー1</a> 5 <ul class="menu_sub"> 6 <li><a href="">サブメニュー</a></li> 7 <li><a href="">サブメニュー</a></li> 8 <li><a href="">サブメニュー</a></li> 9 </ul> 10 </li> 11 <li> 12 <a href="#">メニュー2</a> 13 <ul class="menu_sub"> 14 <li><a href="">サブメニュー</a></li> 15 <li><a href="">サブメニュー</a></li> 16 </ul> 17 </li> 18 <li><a href="#">メニュー3</a></li> 19 </ul> 20 </nav> 21 22 <!-- メニューアイコン --> 23 <div class="toggle_button"> 24 <span class="toggle_line01"></span> 25 <span class="toggle_line02"></span> 26 <span class="toggle_line03"></span> 27 <p class="toggle_txt">MENU</p> 28 </div> 29 <div class="modal_bg"></div> 30

jquery

1/*------------------------------------- 2 ナビゲーション 3-------------------------------------*/ 4 5/* アコーディオン、ドロップダウン */ 6$(function () { 7 8 let timer = ''; 9 let screenWidth = $(window).width(); //画面サイズ取得 10 11 /*---------- 初回画面幅判定 ----------*/ 12 if (screenWidth >= 960) { //pc以上なら 13 dropdown(); 14 } else { //tab、spなら 15 accordion(); 16 } 17 18 /*---------- 画面リサイズ時判定 ----------*/ 19 $(window).resize(function () { 20 if (timer > 0) { 21 clearTimeout(timer); 22 } 23 24 timer = setTimeout(function () { 25 let screenWidth = $(window).width(); 26 27 if (screenWidth >= 960) { //pc以上なら 28 dropdown(); 29 //要素の効果を無効化する 30 return false; 31 } else { //tab、spなら 32 accordion(); 33 //要素の効果を無効化する 34 return false; 35 } 36 }, 500); 37 }); 38 39}); 40 41 42 43/*------------------------------------- 44 プラグイン 45-------------------------------------*/ 46 47/* ドロップダウン */ 48function dropdown() { 49 $("ul.menu li").hover( 50 function () { 51 $(".menu_sub:not(:animated)", this).slideDown(300); //アニメ実行中に同じアニメが追加実行されない 52 }, 53 function () { 54 $(".menu_sub", this).slideUp(0); 55 } 56 ); 57} 58 59/* アコーディオン */ 60function accordion() { 61 $('.menu > li a').click(function () { 62 // $('menu_sub').css('display','none'); 63 $(this).next().slideToggle(400); 64 }); 65} 66 67/* --------------------------------------------------------- */ 68 69 70

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

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

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

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

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

guest

回答1

0

ベストアンサー

resize した時に、dropdown() や accordion() で設定したイベントリスナを解除しなければいけないのではないかな、と思いました。

jQuery リファレンス:off

.off() | jQuery API Documentation

投稿2022/02/02 04:20

Lhankor_Mhy

総合スコア37409

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

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

arin1128

2022/02/03 08:19

ご回答ありがとうございます。 色々試行錯誤しながら無事解決いたしました!(^^) 本当にありがとうございました!感謝です。 前の挙動が残っていたので、リサイズ時にきっと前の挙動を解除しないといけないのかな。と思っていたので、まさにイベントを解除するものを教えていただきありがとうございます。 ちなみに以下のようにして解決しました(^^) /*---------- 画面リサイズ時判定 ----------*/ $(window).resize(function () { if (timer > 0) { clearTimeout(timer); } timer = setTimeout(function () { let screenWidth = $(window).width(); $("ul.menu li").off(); //今回追加分 $('.menu > li a').off(); //今回追加分 if (screenWidth >= 960) { //pc以上なら dropdown(); } else { //tab、spなら accordion(); } }, 500); });
Lhankor_Mhy

2022/02/03 08:23

お役に立てたようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問