我所做的是改变了方法。我在这个小提琴中制作了一个事件捕捉器 div:
http://jsfiddle.net/L2J5X/2/
并在鼠标移到菜单动画进入的 div 上时添加事件处理程序,当鼠标移出 div 菜单动画时。
function dothething(amover)
{
if(amover)
{
$(".nav").animate({top: '0px'}, 200, "linear");
}
else
{
window.setTimeout(function(){if(!$amthere){
$(".nav").animate({top: '-40px'}, 200, "linear");
}},100);
}
}
$("#detect").mouseover(function(){dothething(true);});
$("#detect").mouseout(function(){dothething(false);});
$("#mainNav").mouseover(function(){$amthere=true;});
$("#mainNav").mouseout(function(){$amthere=false;});
$amthere = false;
div 绝对定位在顶部 z-index 上,因此事件总是被捕获。无论其他 div 在随机放置时会做什么(请参见绿色大块)。
希望这个对你有帮助。
* 编辑 *
添加了一个短暂的延迟,以防止从捕手 div 到菜单时隐藏。这就是 $amthere 变量的作用,看看我们是否在菜单上。然后用 100 毫秒的延迟检查我们是否可以进行真正的鼠标操作,如果不是什么也不做,如果可以,隐藏隐藏菜单。