jquery菜单盘旋

时间:2012-02-07 22:28:18

标签: jquery hover mouseevent

我有一个菜单,当我将鼠标悬停在div上时,它将显示并且在鼠标输出时它会淡出。问题是,如果你翻过菜单的任何一个孩子,菜单就会消失(因为从技术上来说,如果你超过其中一个孩子,那么你就不会超过父母)是否有办法让孩子们翻身不会算作鼠标输出?这是我的代码:http://jsfiddle.net/32bLg/

5 个答案:

答案 0 :(得分:5)

这是一个非常简单的问题,大多数人倾向于使用计时器和特殊情况检查大量复杂化。简单的解决方案是通过标记。将悬停目标和菜单放在同一父级下,并在父级上跟踪悬停。 Like this。 您可能还想使用hoverIntent jQuery插件来避免错误的悬停事件。

用户体验笔记:持续超过500毫秒的淡入淡出动画非常粗鲁。请不要这样做。

答案 1 :(得分:2)

这是一个简单的解决方案: http://jsfiddle.net/32bLg/16/

答案 2 :(得分:2)

您需要在hover div中包含菜单div。请参阅http://jsfiddle.net/T72jm/2/

你会注意到(至少在Chrome中)如果你将鼠标悬停在悬停div上并且什么都不做,菜单div就会淡出。

答案 3 :(得分:1)

看看这些不错的例子:

Nice JQuery menus

特定的多级别:

Multilevel JQuery menu

链接2中的HTML:

    <ul id="nav">
    <li><a href="#">1 HTML</a></li>
    <li><a href="#">2 CSS</a></li>
    <li><a href="#">3 Javascript</a>
        <ul>
            <li><a href="#">3.1 jQuery</a>
                <ul>
                    <li><a href="#">3.1.1 Download</a></li>
                    <li><a href="#">3.1.2 Tutorial</a></li>
                </ul>
            </li>
            <li><a href="#">3.2 Mootools</a></li>
            <li><a href="#">3.3 Prototype</a></li>
        </ul>
    </li>
</ul>

CSS:

 #nav, #nav ul{
         margin:0;
         padding:0;
         list-style-type:none;
         list-style-position:outside;
         position:relative;
         line-height:1.5em;
     }

    #nav ul ul{
    top:auto;
    }

#nav li ul ul {
    left:12em;
    margin:0px 0 0 10px;
    }

#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul{
    display:none;
    }
#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul{
    display:block;
    }

JS:

function mainmenu(){
$(" #nav ul ").css({display: "none"}); // Opera Fix
$(" #nav li").hover(function(){
        $(this).find('ul:first').css({visibility: "visible",display: "none"}).show(400);
        },function(){
        $(this).find('ul:first').css({visibility: "hidden"});
        });
}

 $(document).ready(function(){
    mainmenu();
});

答案 4 :(得分:1)

这是我的修复

window.menushowing = false;

$('#menu').hover(

function() {
    window.menushowing = true;
}, function() {
    window.menushowing = false;
    hideMenu();
});

function hideMenu() {
    if (window.menushowing) return;
    $('#menu').animate({
        opacity: 0
    }, 1500, function() {
        $('#menu').hide();
    });
}

$('#examplePic').hover(

function() {
    window.menushowing = true;
    $('#menu').css('display', 'block');
    $('#menu').animate({
        opacity: 1
    }, 1500);

}, function() {
    hideMenu();
});