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

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

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

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

CSS

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

Q&A

解決済

1回答

1507閲覧

jQuery slidetoggle resize での連発の改善

mogiruri

総合スコア37

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

JavaScript

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

jQuery

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

CSS

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

0グッド

1クリップ

投稿2018/07/27 13:22

レスポンシブデザインで、モバイルサイズに移行した時にヘッダーメニューをドロップダウンに変更したくslidetoggleを適用したいのですが、窓幅をresizeしたときに開閉が連発しています。
さらに、モバイルサイズから上のサイズへリサイズしたときにメニューが消えてしまいます。

過去の回答をみてみましたがいまいちわかりませんでした、、、

解決方法がわかる方、ご教授願えませんでしょうか?

jquery

1コード 2//Toggle does not work well when Win is resized. 3 $(window).resize(function(){ 4 var wsize = $(window).width(); 5 var mobilesize = 750; 6 if(wsize <= mobilesize){ 7 $('.header-list').slideToggle(); 8 }else{ 9 $('.header-list').show(); 10 } 11 }); 12 13 var wsize = $(window).width(); 14 var mobilesize = 750; 15 if(wsize <= mobilesize){ 16 $('.dropdown').click(function(){ 17 $('.header-list').slideToggle(); 18 }); 19 }

css

1コード 2.header-list{ 3 /* モバイル以外の適用 */ 4 font-family: Avenir-LightOblique; 5 font-size: 16px; 6 text-align: left; 7 position: absolute; 8 top: 12px; 9 margin-left: 100px; 10 letter-spacing: 3px; 11} 12 13/* モバイル時の @media */ 14 .header-list{ 15 display: none; 16 position: absolute; 17 top: 40px; 18 right: 0; 19 width: 120px; 20 height: 160px; 21 background-color: rgba(0, 0, 0, 0.6); 22 } 23 24 .header-list li{ 25 display: block; 26 padding: 1em 0 1em 1em; 27 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず窓枠をリサイズした時に開閉が行われる事象ですが、
$(window).resize(function(){}) はwindowサイズをリサイズ(変更)するたびにイベントが発火します。
なので下記の場合はwindowサイズが750px以下の場合にwindowをリサイズ(変更)した場合はif文の中身の処理が実行されるのでドロップダウンメニューが開閉され続けます。

lang=javascript

1 $(window).resize(function(){ 2 var wsize = $(window).width(); 3 var mobilesize = 750; 4 if(wsize <= mobilesize){ 5 $('.header-list').slideToggle(); 6 }else{ 7 $('.header-list').show(); 8 } 9 });

ドロップダウンの見た目の制御はJavascriptで行うのではなくメディアクエリーで制御し、
スライドトグルの処理はクリックイベントで制御すれば良いと思います。
上記のコードを削除すればリサイズ時の開閉問題は解決されます。

投稿2018/07/27 13:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mogiruri

2018/07/28 02:38

easy_no_easy 様 ご回答ありがとうございます。リサイズからトグルを外すことで暴発を解消できました!リサイズの場合は絡む動作を注意していかなければなりませんね、、、 トグルのクリックイベントをリサイズからはずし $('.dropdown').click(function() { $('.header-list').slideToggle(); }); モバイル表示でメニューを閉じてから750↑にリサイズするとメニューがそのまま閉じ続けてしまう現象があったのですが、下記コードで解消することができました。 $(window).resize(function () { var wsize = $(window).width(); var mobilesize = 750; if (wsize > mobilesize && $('.header-list').css('display') == 'none') { $('.header-list').css('display','block'); }else if (wsize <= mobilesize && $('.header-list').css('display') == 'block') { $('.header-list').css('display','none'); } }); 長いこと悩んでいたので、解消できて助かりました。この度はアドバイスありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問