2012-08-03 47 views
1

首先,我要说明的是证明了这拨弄所有一切的:对角线鼠标悬停与3级深的jQuery下拉菜单

http://jsfiddle.net/rxaBH/3/

考虑到深藏在3个级别的导航选项卡;第一级选项卡,第二级:下拉列表。第三级是第二级下拉列表,可以打开。这里有一个视觉:

enter image description here

。它简化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> 

我不会把CSS代码在这里烦,因为实在是太长了,但它可以在小提琴link被发现。

这里是jQuery代码,显示/隐藏基于鼠标移到菜单:

$("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); 
}) 

所有这一切都非常顺利,但是用户交互可以提高导航到第3级的项目。可以说你想导航到西瓜>绿色>真绿黑。所以你将鼠标悬停在“西瓜”上,然后出现下拉菜单,然后将鼠标悬停到“绿色”,然后出现侧边下拉菜单。然后从“绿色”水平悬停到“较暗”,然后垂直悬停到“真绿色”。这是一个visul。鼠标移动是由红色箭头可视化:

enter image description here

但是,如果用户想从斜“绿色”直奔“真的深绿”不先水平滚动?这里有一个视觉所期望的行为的:

enter image description here

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

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

希望所有这些都有道理!

谢谢。

回答

1

This little plugin可让您为悬停添加一点暂停,以便您可以查看用户是否真的想要悬停。

+0

hoverIntent正是你需要在这里。 – 2012-08-03 18:05:20

+0

感谢您的回答。我只是尝试使用hoverIntent,我确实看到行为上的差异,但仍然不正确。除非我没有正确使用它。 – Sammy 2012-08-03 19:22:13

+0

您必须调整时间间隔和灵敏度以适应您的需求。 – Yukulelix 2012-08-03 22:42:45

-1

您是否考虑过使用门垫?使用多层导航不是一个明智的想法,它有很多可用性问题。

这是您想要的理想行为。 Onmouseout,你想要的元素消失,否则它会坚持在那里。

检查ibm网站上的门垫菜单,我确信您会喜欢它。

http://www.ibm.com/us/en/

+0

这是一个完全不同的结构。我主要感兴趣的是如何使我所做的工作。 – Sammy 2012-08-03 19:07:31