答案 0 :(得分:3)
这是您的工作代码http://jsfiddle.net/GNQyt/18
我使用了延迟方法。离开.icn
后到达ul
,您有1000毫秒。如果您在所需时间内点击ul
,则会删除淡出请求。
$('.icn').on({
mouseenter: function() {
clearTimeout($(this).data('timeoutId'));
$(this).children('ul').show('fast');
},
mouseleave: function() {
var self = this;
var timeoutId = setTimeout(function() {
$(self).children('ul').hide('fast');
}, 1000);
$(self).data('timeoutId', timeoutId);
}
});
答案 1 :(得分:1)
使用mouseenter,而不是在那种情况下悬停
这是“Mouseenter”与“Mouseover”http://api.jquery.com/mouseover/
之间的一个很好的互动比较演示非常明确。
答案 2 :(得分:1)
闪烁是由于从绿色框移动到弹出窗口而产生的。由于你已经离开绿色框,所以to之间的距离会导致计算机关闭弹出窗口,但是在弹出窗口完全关闭之前,鼠标到达弹出窗口,导致它再次打开。理想情况下,两者应相交以允许鼠标直接从盒子移动到弹出窗口。或者,在关闭弹出窗口之前增加延迟。
答案 3 :(得分:1)
闪烁不是因为徘徊在孩子身上,而是在关闭时抓住菜单。将top: 0px; left: 0px;
左上方的菜单移动即可解决问题。此外,height: 500px; width: 500px;
改变跨度的高度和宽度也可以解决。为了使高度和宽度有效,将跨度改为div。
答案 4 :(得分:1)
这是另一个使用hitbox的解决方案。这个是非常黑的,但我认为你会从中得到一个感觉:)
请记住
<span>
<div>
</div>
</span>
是一种非法操作,因为你不应该将块元素包装成内联元素。