Подменю навигации с проблемой hoverint - PullRequest
1 голос
/ 23 июля 2011

У меня есть меню навигации на трех уровнях: главное меню всегда отображается, подменю и подменю.

Подменю и подменю должны появляться только при наведении.Я использую плагин 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); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...