Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对角线鼠标悬停,带有3级深度jquery下拉菜单_Javascript_Jquery_Html_Css_Drop Down Menu - Fatal编程技术网

Javascript 对角线鼠标悬停,带有3级深度jquery下拉菜单

Javascript 对角线鼠标悬停,带有3级深度jquery下拉菜单,javascript,jquery,html,css,drop-down-menu,Javascript,Jquery,Html,Css,Drop Down Menu,首先,我将要解释的所有内容都在这把小提琴中演示: 考虑一个深入3层的导航选项卡;第一级选项卡,第二级:下拉列表。第三级打开到侧面的第二个下拉列表。这是一个视觉: 。它的简化HTML如下所示: <ul id = "maintabs"> <li>child 1</li> <li>child 2 <ul> <li>grand child 1</li>

首先,我将要解释的所有内容都在这把小提琴中演示:

考虑一个深入3层的导航选项卡;第一级选项卡,第二级:下拉列表。第三级打开到侧面的第二个下拉列表。这是一个视觉:

。它的简化HTML如下所示:

<ul id = "maintabs">
    <li>child 1</li>
    <li>child 2
        <ul>
            <li>grand child 1</li>
            <li>grand child 2
                <ul>
                    <li>great grand child 1</li>
                    <li>great grand child 2</li>
                    <li>great grand child 3</li>
                </ul>                
            </li>
        </ul>    
    </li>
</ul>
所有这些都非常有效,但是用户交互可以提高导航到第三级项目的效率。假设您想导航到西瓜>绿色>真正的深绿色。因此,您可以将鼠标悬停在“西瓜”上,然后出现下拉列表,然后将鼠标悬停在“绿色”上,然后出现侧面下拉列表。然后水平悬停从“绿色”到“深色”,然后垂直悬停到“真正的深绿色”。这是一个视觉。鼠标移动通过红色箭头显示:

但是,如果用户希望从“绿色”直接对角转到“真正的深绿色”,而不首先水平滚动,该怎么办?以下是所需行为的视觉效果:

这会导致鼠标离开“绿色”,因此菜单会折叠并完全消失。那么,如何解决这个问题呢

我试着增加mouseleave的超时时间,但是另一个问题出现了:如果你想在去那里的路上从绿色直接转到“真正的深绿色”,你会在“红色”和“紫色”上盘旋。如果“红色”也有孩子呢?然后鼠标从“绿色”移到“红色”上,也会显示“红色”的子菜单,然后你会同时打开超过1个三级菜单,这看起来很糟糕

希望所有这些都有意义


谢谢。

你考虑过用门垫代替吗?使用多层导航不是一个明智的想法,它有许多可用性问题

这是你想要的理想行为。在mouseout中,您希望该元素消失,否则它将继续存在

查看ibm网站上的门垫菜单,我相信您会喜欢它的


这解决了我的问题

这是一个完全不同的结构。我主要感兴趣的是如何使我投入的工作发挥作用。
$("ul#maintabs li").hover(function () {
    $('ul:eq(0)', this).stop(true, true).animate({
        height: 'show',
        opacity: 'show'
    }, 150);
}, function () {
    $('ul:eq(0)', this).animate({
        height: 'hide',
        opacity: 'hide'
    }, 150);
})
$(document).ready(function() {
    $("ul.nav li").hover(function() { //When trigger is hovered...
        $(this).children("ul.sub").stop(true).slideDown();
    }, function() {
        $(this).children("ul.sub").stop(true).slideUp();
    });
});