jQueryでメガメニューを作っています。
下記のようなコードで途中まで実装しています。
HTMLcss
1<style> 2ul,li{ 3 width: 100%; 4 margin: 0; 5 padding: 0; 6 list-style: none; 7} 8a{ 9 display: block; 10 line-height: 80px; 11 text-align: center; 12} 13.wrapper{ 14 width: 1280px; 15 margin: auto; 16 background: #eee; 17} 18.nav{ 19 display: flex; 20} 21.navlink.is-active a{ 22 background: #ddd; 23} 24.megamenu{ 25 display: none; 26} 27.megamenu a{ 28 background: #ddd; 29} 30.megamenu.is-active{ 31 display: block; 32} 33</style> 34 35<div class="wrapper"> 36 <ul class="nav"> 37 <li class="navlink" data-menu="megamenu1"><a href="">nav1</a></li> 38 <li class="navlink" data-menu="megamenu2"><a href="">nav2</a></li> 39 <li class="navlink" data-menu="megamenu3"><a href="">nav3</a></li> 40 </ul> 41 <div> 42 <ul class="megamenu megamenu1"> 43 <li><a href="">menu1</a></li> 44 <li><a href="">menu1</a></li> 45 <li><a href="">menu1</a></li> 46 </ul> 47 <ul class="megamenu megamenu2"> 48 <li><a href="">menu2</a></li> 49 <li><a href="">menu2</a></li> 50 <li><a href="">menu2</a></li> 51 </ul> 52 <ul class="megamenu megamenu3"> 53 <li><a href="">menu3</a></li> 54 <li><a href="">menu3</a></li> 55 <li><a href="">menu3</a></li> 56 </ul> 57 </div> 58</div>
jQuery
1$(function(){ 2 3 const navlink = $('.navlink'); 4 const megamenu = $('.megamenu') 5 6 function navToggle(e, self) { 7 if (e == true) { 8 $(navlink).removeClass('is-active'); 9 $(megamenu).removeClass('is-active'); 10 $(self).addClass("is-active"); 11 let activeNav = "." + $(self).attr("data-menu"); 12 $(activeNav).addClass("is-active"); 13 } else { 14 $(navlink).removeClass('is-active'); 15 $(megamenu).removeClass("is-active"); 16 } 17 } 18 // Open 19 $(navlink).mouseenter( 20 function () { 21 let self = this; 22 navToggle(true, self) 23 } 24 ) 25 // Close 26 $(megamenu).mouseleave( 27 function () { 28 navToggle(false) 29 } 30 ) 31})
メガメニューにカーソルと持っていこうとすると同時にnavからmouseleaveしてしまい、メガメニューが閉じてしまうので一旦上記のようにしています。
この実装だとnavから直にmouseleaveした時にメガメニューが閉じないため、どうしたら良いか考え込んでいます。
試しに下記のようにしてみましたが、当然メガメニューにhoverする前に消えてしまいます。
mouseleave時にカーソルがメガニューにhoverしていたら閉じない、などのif条件を書けばいいのでしょうか?
jQuery
1 // Open 2 $(navlink).hover( 3 function () { 4 let self = this; 5 navToggle(true, self) 6 }, 7 function () { 8 navToggle(false) 9 } 10 )
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/12 13:34