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

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

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

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

Q&A

解決済

2回答

270閲覧

一度目のクリックでは反応しない

hayamin1111

総合スコア11

jQuery

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

0グッド

1クリップ

投稿2019/08/06 03:36

編集2019/08/06 04:01

クリックしたら上からドロップメニューが下りてくるようにしたい

jQueryでLPを作っています。スマートフォン用のものを作っているのですが、ハンバーガーメニュー(三←こんな形のメニュー)をクリックしたら形が✖マークに変形し、上からドロップメニューが下りてくる仕様にしたいと思っています。
しかし、クリックすると、一度目ではハンバーガーメニューが変形しません。2度目のクリックで、ようやく✖マークに変形します。ドロップメニューは問題なく表示されます。

HTML

HTML

1<div id="humberger-menu"> 2 <span class="line-1"></span> 3 <span class="line-2"></span> 4 <span class="line-3"></span> 5</div> 6 7<div class="drop-menu"> 8 <ul> 9 <li>hoge</li> 10 <li>hoge</li> 11 <li>hoge</li> 12 </ul> 13</div> 14 15

CSS

CSS

1/* humberger menu */ 2#humberger-menu { 3 position: fixed; 4 top: 24px; 5 right: 20px; 6 width: 40px; 7 height: 32px; 8 z-index: 3; 9} 10#humberger-menu span { 11 position: absolute; 12 width: 40px; 13 height: 4px; 14 background: #333; 15} 16.line-1 { 17 top: 0; 18} 19.line-2 { 20 top: 14px; 21} 22.line-3 { 23 top:28px; 24} 25 26/******* /drop menu *******/ 27.drop-menu { 28 display: none; 29}

jQuery

jQuery

1 2$(function() { 3 4 $('#humberger-menu').on('click', function() { 5 $(this).toggleClass('open'); 6 7 if($(this).hasClass('open')) { 8 $('.line-2').css({ 9 opacity: '1', 10 transition: 'all 0.4s' 11 }); 12 $('.line-1').css({ 13 transform: 'rotate(0) translate(0, 0)' , 14 transition: 'all 0.4s' 15 }); 16 $('.line-3').css({ 17 transform: 'rotate(0) translate(0, 0)', 18 transition: 'all 0.4s' 19 }); 20 } else { 21 $('.line-2').css({ 22 opacity: '0', 23 transition: 'all 0.4s' 24 }); 25 $('.line-1').css({ 26 transform: 'rotate(45deg) translate(3px, 15px)' , 27 transition: 'all 0.4s' 28 }); 29 $('.line-3').css({ 30 transform: 'rotate(-45deg) translate(3px, -15px)', 31 transition: 'all 0.4s' 32 }); 33 } 34 35 $(this).next('.drop-menu').slideToggle('slow'); 36 }); 37}); 38

試したこと

1.一番下のコード( $(this).next('.drop-menu').slideToggle('slow');)の位置を変えてみた(もともとは上から3行目にあった)。

2.$('#humberger-menu').click(function() を
$('#humberger-menu').on('click', function() に変えてみた。

どなたかどうかよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/08/06 03:49

cssもご提示ください
hayamin1111

2019/08/06 04:01

失礼しました。追加いたしました。
guest

回答2

0

ベストアンサー

ifとelseの中身逆では?
toggleクラスでopen追加してるから、最初のクリックでifの中身の処理走ってますよ。

投稿2019/08/06 04:04

zushi0905

総合スコア683

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

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

hayamin1111

2019/08/06 04:07

とんだ勘違いをしていました!お恥ずかしい。 ありがとうございました!無事解決しました。
zushi0905

2019/08/06 04:32 編集

すごくお節介かもしれませんが、ifとelseを入れ替えると条件式のopenクラスを持っていたら(空いていたら)空いている状態のアイコンにするとなってしまい、コードの文脈がおかしくなる感じがしました。 今更ですが、$(this).toggleClass('open');を下に条件文の処理後に持ってくる方が文脈的に自然かも知れません。
hayamin1111

2019/08/06 07:47

ほお!なるほど!確かにその順番の方が自然ですね!ありがとうございます!
guest

0

ifの中身逆にすると良い感じに動くように見えます。

投稿2019/08/06 04:07

m.ts10806

総合スコア80850

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

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

m.ts10806

2019/08/06 04:08

ちょっと遅かった。
hayamin1111

2019/08/06 04:09

すみません・・・。でも端的な回答をありがとうございます!
m.ts10806

2019/08/06 04:12

「理由」まであったほうが後から読んだ人には参考になるので、 BAの回答が正ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問