У меня есть меню навигации на трех уровнях: главное меню всегда отображается, подменю и подменю.
Подменю и подменю должны появляться только при наведении.Я использую плагин hoverint jquery со следующей конфигурацией:
jQuery(function() {
var mainmenu_cfg = {
interval: 200,
over: openSubmenu,
sensitivity: 100,
timeout: 500,
out: closeSubmenu
};
function openSubmenu() {
$("ul#submenu").css('visibility', 'visible');
}
function closeSubmenu() {
$("ul#submenu").css('visibility', 'hidden');
}
var submenu_cfg = {
over: openSubsubmenu,
sensitivity: 100,
timeout: 500,
out: closeSubsubmenu
}
function openSubsubmenu() {
console.info($(this).next());
$(this).next().css('visibility', 'visible');
$("ul#submenu").css('visibility', 'visible');
}
function closeSubsubmenu() {
$(this).css('visibility', 'hidden');
$(this).next().css('visibility', 'hidden');
}
$("li.servizi a").hoverIntent(mainmenu_cfg);
$("#submenu > li a").hoverIntent(submenu_cfg);
});
Что происходит, когда при наведении курсора на ссылку в главном меню первое подменю отображается правильно, но когда я перемещаю мышь над подменюисчезает через некоторое время (я полагаю, потому что вызывается функция "closeSubmenu").Я думаю, то же самое произошло бы с подменю, но я все еще застрял здесь, так что ...
Как я могу оставить подменю открытым?Еще одна вещь: главное меню вертикальное, а первое подменю горизонтальное, поэтому мне нужно вызывать функцию hoverIntent для элемента «a», а не для «li», в противном случае она будет активирована для всего «li», которое на самом деледлиннее.
РЕДАКТИРОВАТЬ:
вот демо: http://jsfiddle.net/dtBzE/
РЕДАКТИРОВАТЬ 2: Я почти решил проблему, добавив много условий.Он не идеален и требует оптимизации, но работает:
jQuery(function() {
var mainmenu_cfg = {
interval: 200,
over: openSubmenu,
sensitivity: 100,
timeout: 500,
out: closeSubmenu
}
var submenu_cfg = {
over: openSubsubmenu,
sensitivity: 100,
timeout: 200,
out: closeSubsubmenu
}
var subsubmenu_cfg = {
over: onSubsubmenu,
sensitivity: 100,
timeout: 500,
out: offSubsubmenu
}
var hover_submenu = false;
var hover_subsubmenu = false;
function openSubmenu() {
$("ul#submenu").css('visibility', 'visible');
}
function closeSubmenu() {
if (hover_submenu || hover_subsubmenu) {
$("ul#submenu").css('visibility', 'visible');
hover_submenu = false;
hover_subsubmenu = false;
}
else {
console.info(hover_submenu);
console.info('close submenu');
$("ul#submenu").css('visibility', 'hidden');
}
}
function openSubsubmenu() {
hover_submenu = true;
$(this).next().css('visibility', 'visible');
}
function closeSubsubmenu() {
if (!hover_subsubmenu)
$(this).next().css('visibility', 'hidden');
if (hover_submenu || hover_subsubmenu)
{
$("ul#submenu").css('visibility', 'visible');
hover_submenu = false;
hover_subsubmenu = false;
}
else if ((hover_submenu == true) && (hover_subsubmenu == false)) {
$(this).next().css('visibility', 'hidden');
$("ul#submenu").css('visibility', 'visible');
hover_submenu = false;
} else {
$("ul#submenu").css('visibility', 'hidden');
}
}
function onSubsubmenu() {
hover_subsubmenu = true;
$(this).parent().parent().css('visibility', 'visible');
}
function offSubsubmenu() {
$(this).parent().parent().css('visibility', 'hidden');
}
$("li.servizi a").hoverIntent(mainmenu_cfg);
$("#submenu > li a").hoverIntent(submenu_cfg);
$("ul.subsubmenu > li a").hoverIntent(subsubmenu_cfg);
});