2010-06-03 123 views
1

我有一个可以正常工作的下拉菜单,但我希望如此,如果我将鼠标悬停在菜单上,它不会立即再次隐藏。所以基本上我想要一秒钟的延迟。如何推迟用jquery下拉菜单隐藏菜单?

我已阅读关于setTimeout,但不知道是否它是我需要?

$('#mainnav a').bind('mouseover', function() 
{ 
    $(this).parents('li').children('ul').show(); 
}); 

$('#mainnav a').bind('mouseout', function() 
{ 
    $(this).parents('li').children('ul').hide(); 
}); 

回答

3

setTimeout正是你所需要的。

$('#mainnav a').bind('mouseout', function() 
{ 
    var menu = this; 
    setTimeout(function() 
    { 
     $(menu).parents('li').children('ul').hide(); 
    }, 1000); 
}); 
+1

下次您显示菜单时,请确保此计时器已关闭,以防止菜单突然打开/关闭 – baloo 2010-06-03 14:02:15

+1

感谢您的回复熊,当我尝试它时,菜单现在停留并且不会消失。 – 2010-06-03 14:04:09

+0

@Keith尝试设置:var menu = this;在setTimeout()之前,并在超时函数内将“this”更改为“menu” – baloo 2010-06-03 14:06:23

0

指定“slow”作为显示和隐藏的参数。来自JQuery Docs

$('#mainnav a').bind('mouseover', function() 
{ 
    $(this).parents('li').children('ul').show("slow"); 
}); 

$('#mainnav a').bind('mouseout', function() 
{ 
    $(this).parents('li').children('ul').hide("slow"); 
}); 
+1

不完全。这缓慢地隐藏起来。隐藏之前,它根本不等待。 – 2010-06-03 14:00:51

1

对于鼠标移出我就躲()调用之前添加一个链接的动画:

$('#mainnav a').bind('mouseout', function() 
{ 
    $(this).parents('li').children('ul').animate({opacity:0.99}, 2000).hide(); 
}); 

这将使2秒的延迟。