делает подменю фактически «внутри» пункта меню, к которому вы присоединяете событие, таким образом, событие входа / выхода происходит только тогда, когда пользователь фактически покидает область меню
как это:
css
#menuItem {
cursor: pointer;
width: 100px;
}
#menuItem .title {
background-color: orange;
}
#subMenu {
background-color: grey;
margin-top: 5px;
cursor: pointer;
display:none;
width: 80px;
}
html
<div id="menuItem">
<div class="title">Item1</div>
<div id="subMenu">
<ul>
<li>subitem1</li>
<li>subitem2</li>
<li>subitem3</li>
</ul>
</div>
</div>
js
$('#menuItem').mouseenter(function() {
$('#subMenu').slideDown(400);
}).mouseleave(function() {
$('#subMenu').hide(400);
});
дружеское примечание:
вы можете использовать некоторую форму .stop(true, true)
перед анимацией меню или перемещениемпри быстром перемещении курсора назад и вперед по меню анимация будет «складываться», и пользователю это будет казаться странным.см. обсуждение здесь: Где поместить clearQueue в код jQuery
, чтобы оно выглядело так:
$('#menuItem').hover(function() {
$('#subMenu').stop(true, true).slideDown(200);
}, function() {
$('#subMenu').stop(true, true).slideUp(200);
});