Проблемы с CSS: Лучше не играть с display:none
и opacity
самостоятельно, оставьте это на усмотрение jQuery и используйте соответствующие функции для fadeIn()
и fadeOut()
.
Вместо того, чтобы помещать display:block; float:left;
в элементы меню <li>
, вы должны использовать display:inline-block
. Если вы перемещаете <li>
s, это фактически вырывает их из родительского контейнера, оставляя ul с нулевым размером, поэтому невозможно прослушивать события mouseleave
, если вы явно не установите его размер.
Проблемы с кодом: В плагине hoverIntent timeout
может быть не тем, что вы ищете. Тайм-аут автоматически запускает событие out
через определенное время. Чтобы отложить эффект наведения, используйте sensitivity
и interval
. Посетите страницу документации .
Если вы примените вышеупомянутые исправления, единственными необходимыми событиями являются hoverIntent over и отпускание мыши основной навигации. Событие over
исчезает в текущем подменю и затемняет остальные, mouseleave
исчезает в активном подменю, когда пользователь выключает навигацию. Посмотрите на вашу модифицированную демоверсию jsfiddle: http://jsfiddle.net/BQuPz/4/
// Hide inactive ones
$('#main-nav > li:not(.current-menu-parent) .sub-menu').hide();
// What to do when hovering over a menu item
$("#main-nav > li").hoverIntent({
over: function(){
// Find the hovered menu's sub-menu
var $submenu = $(this).find('.sub-menu');
// Stop the animation and fade out the other submenus
$('.sub-menu').not($submenu).stop(true,true).fadeOut(260);
// Fade in the current one
$submenu.fadeIn(260);
}
});
// What to do when user leaves the navigation area
$('#main-nav').mouseleave(function(){
// Fade out all inactive submenus
$('#main-nav > li:not(.current-menu-parent) .sub-menu').fadeOut(260);
// Fade in the active one
$('.current-menu-parent .sub-menu').fadeIn(260);
});