我有一个包含li集合的div来构建菜单。
在包含的ul之外,我有一个div,只有在原始菜单中的项目悬停时才应该显示该 div。
现在,我了解了整个 mouseout,mouseover 效果,但我坚持的是,如果鼠标移到内容 div 上,则保持内容div处于活动状态,但如果选择了任何li元素,则隐藏(清除)然后显示。
代码(为易读而修剪)
<div id="menu-ext" class="ext-menu wrapper">
<div class="navigation">
<ul>
<li>
Menu Item 1
</li>
<li>
Menu Item 2
</li>
<li>
Menu Item 3
</li>
<li>
Menu Item 4
</li>
</ul>
</div>
<div class="clear"></div>
<div class="content window" style="display:none;">
this contains text to be displayed, based on a what is hoverd in the navigation above (template driven)
</div>
</div>
这里重要的不是将在 div.content.window 中显示的数据,而是在设置了可见性后如果向下移动鼠标如何使其保持打开状态,以及如果将鼠标移到外部如何隐藏它div.content.window 或任何导航项。
我认为 hoverIntent 能够做到这一点,但意图(我有)没有初始化。
我的代码:
<script type="text/javascript">
jQuery(document).ready(function ($) {
'use strict';
var config = {
interval: 100,
sensitivity: 1,
out: onHoverOut,
over: onHoverOver
};
$("li", $(".navigation")).hoverIntent(config);
});
function onHoverOver(parent) {
'use strict';
var $currentTarget = $(parent.currentTarget),
$hasTemplate = ($("selector", $currentTarget).length >= 1);
if ($hasTemplate) {
onPopulateMenu(parent);
// show menu
}
}
function onHoverOut(parent) {
'use strict'
onClearMenu();
// TODO: hide the menu
// I think the problem is here?
}
function onClearMenu() {
'use strict';
// TODO: clear the menu of all HTML
}
function onPopulateMenu(parent) {
'use strict';
// TODO: populate the content menu
}
</script>
我确信我能够保持一个div处于活动状态,但我似乎无法确定这个问题的解决方案。这可能吗?
更新
抱歉不是很清楚。
基本上,当用户将鼠标悬停在菜单项上时,应该会弹出一个大型菜单类型的导航,其中包含用户可以单击的其他链接。我目前的问题是“超级菜单”窗口位于原始导航中的每个li元素之外,这正是 hoverIntent 正在寻找的。
我的问题是,我错过了什么吗?因为一旦鼠标光标从li移向菜单弹出窗口,它就会消失,这不是我正在寻找的功能。
菜单窗口是否应该嵌入每个li?这对我来说没有意义,所以我想如果我把它放在外面,它会起作用。
如前所述,如果光标从li移开,我需要窗口保持活动状态,但如果状态在窗口之外,我需要它消失。
我可以写一些激烈的 JS 来确定光标的位置,看看坐标是否与接受的位置相对应,然后切换,但这似乎也有点过分?