首先,我要说明的是证明了这拨弄所有一切的:对角线鼠标悬停与3级深的jQuery下拉菜单
考虑到深藏在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>
我不会把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。鼠标移动是由红色箭头可视化:
但是,如果用户想从斜“绿色”直奔“真的深绿”不先水平滚动?这里有一个视觉所期望的行为的:
这会导致鼠标离开“绿色”,因此菜单崩溃和完全消失。那么如何解决这个问题呢?
我试着增加了mouseleave的超时时间,但后来又出现了另一个问题:如果你想从绿色直线走到“真绿色”,那么你会在“红色”和可能“紫色”上盘旋。如果“红”也有孩子呢?然后将鼠标移出“绿色”和“红色”将显示“红色”子菜单,然后您将同时打开超过1个三级菜单,这看起来很糟糕。
希望所有这些都有道理!
谢谢。
hoverIntent正是你需要在这里。 – 2012-08-03 18:05:20
感谢您的回答。我只是尝试使用hoverIntent,我确实看到行为上的差异,但仍然不正确。除非我没有正确使用它。 – Sammy 2012-08-03 19:22:13
您必须调整时间间隔和灵敏度以适应您的需求。 – Yukulelix 2012-08-03 22:42:45