ヘッダーメニューのサブメニューとかに。
動作イメージ
マウスを乗せたら下の階層が表示されるメニューを作ったとする。
表示された部分からカーソルを外したらまた非表示に戻るようにする。
ついうっかりカーソルを外しただけだから、すぐに戻したら非表示にならないように猶予をもたせる。
そんな感じ。
こんな感じ
こんなのだったとして
<ul class="main">
<li>
<button>submenu</button>
<ul class="sub">
<li><a>....</a></li>
<li><a>....</a></li>
<li><a>....</a></li>
<li><a>....</a></li>
</ul>
</li>
</ul>こんな感じだったとして
ul.main{
li{
position: relative;
ul.sub{
display: none;
position: absolute;
}
}
}こう。
$(function(){
//buttonを押したら.sub表示
$('button').on('mouseenter',function(){
$(this).next('.sub').fadeIn('fast');
})
//マウスを外したら1秒後に.subを非表示にするけど、1秒以内に戻ってきたら非表示キャンセル
let hideTimer = null;
$('button,.sub').on('mouseleave', function(){
hideTimer = setTimeout(function(){
$(this).fadeOut('fast');
}, 1000);
}).on('mouseenter',function(){
if(hideTimer){
clearTimeout(hideTimer);
hideTimer = null;
}
})
})以上です。

コメント