您只需定位相关列表,类似于以下内容:
var $dropdown;
$('.dropdown ul').hide();
$('.dropdown').hover(function() {
$dropdown = $(this).find('ul');
$dropdown.stop().slideDown(500);
}, function() {
$dropdown.stop().slideUp(200);
});
我在上面使用变量的唯一原因是你不必为同一个下拉菜单遍历两次,这是一个很好的习惯。
你当然也可以这样做:
$('.dropdown ul').hide();
$('.dropdown').hover(function() {
$(this).find('ul').stop().slideDown(500);
}, function() {
$(this).find('ul').stop().slideUp(200);
});
另外,我使用find()而不是children()的原因是因为children()
只能沿着 DOM 树向下移动一个级别,而find()
可以向下遍历多个级别来选择后代元素。
在您的特定情况下childrend()
,尽管您只下降了 1 级,但似乎绝对没问题。
编辑
为了完整起见,如果您想在单个悬停功能中使用slideToggle(),您可以按照另一个答案中的说明进行操作:
$('.dropdown').hover(function() {
$(this).find('ul').stop(true, true).slideToggle(500);
}
请注意,在使用此选项时,您可能需要true, true
在stop()调用中包含以防止滑动菜单lagging
发生反转并可能发生反转。
- clearQueue一个布尔值,指示是否也删除排队的动画。默认为假。
- jumpToEnd 一个布尔值,指示是否立即完成当前动画。默认为假。