アコーディオンメニューを作っています。
スマホ用のもので、親メニューをクリックするとメニューバーの隣のプラスがマイナスとなり中のメニューが表示されます
クリックしたメニュー以外の場所をクリックすると自動で閉じるようになっています
【問題】
親メニューをクリックし開き、同じメニューをクリックするとアイコンが+に戻ります。
しかし、クリックしたメニュー以外のところをクリックすると出てきたメニューは閉じられるのですがアイコンがマイナスのままでプラスに戻ってくれません
下記のようなコードなのですが、どこを改善すればよいでしょうか?
どこがネックになっているかわからなかったのでjavascript得意な方見ていただけませんでしょうか?
javascript
$(function(){ $("#main-drop > li").on("click",function(){ $($(this).next("ul")).slideToggle(); $($(this).next("ul")).siblings("ul").slideUp(); if ($(this).children(".accordion_icon").hasClass('active')) { // activeを削除 $(this).children(".accordion_icon").removeClass('active'); } else { // activeを追加 $(this).children(".accordion_icon").addClass('active'); } }); });
html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="style.css"> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" src="drop-down.js"></script> <title>Drop-Down</title> </head> <body> <div id="moblie-drop-down"> <h2 class="moblie-drop-down-h2">Title</h2> <ul id="main-drop"> <li><p class="drop-title">Sample1</p><p class="accordion_icon"><span></span><span></span></p></li> <ul class="sub-drop"> <li><a href="#"><p class="sub-drop_title">1</p><div class="arrow"></div></a></li> <li><a href="#"><p class="sub-drop_title">1</p><div class="arrow"></div></a></li> </ul> <li><p class="drop-title">Sample2</p><p class="accordion_icon"><span></span><span></span></p></li> <ul class="sub-drop"> <li><a href="#"><p class="sub-drop_title">2</p><div class="arrow"></div></a></li> <li><a href="#"><p class="sub-drop_title">2</p><div class="arrow"></div></a></li> </ul> </ul> </ul> </div> </body> </html>
css
/*アイコンプラスマイナス*/ .accordion_icon, .accordion_icon span { display: inline-block; transition: all .4s; box-sizing: border-box; } .accordion_icon { position: relative; width: 70px; height: 70px; float: right; margin-right: 5px; margin-top: -90px; } .accordion_icon span { position: absolute; left: 6px; width: 50%; height: 2px; background-color: black; border-radius: 4px; -webkit-border-radius: 4px; -ms-border-radius: 4px; -moz-border-radius: 4px; -o-border-radius: 4px; } .accordion_icon span:nth-of-type(1) { top: 5px; transform: rotate(0deg); -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); } .accordion_icon span:nth-of-type(2) { top: 5px; transform: rotate(90deg); -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); } /*+、-切り替え*/ .accordion_icon.active span:nth-of-type(1) { display:none; } .accordion_icon.active span:nth-of-type(2) { top: 5px; transform: rotate(180deg); -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -ms-transform: rotate(180deg); -o-transform: rotate(180deg); } ```

回答1件
あなたの回答
tips
プレビュー