jQuery:下拉导航 slideDown 和 slideUp

Posted

技术标签:

【中文标题】jQuery:下拉导航 slideDown 和 slideUp【英文标题】:jQuery: Dropdown navigation slideDown and slideUp 【发布时间】:2013-09-10 22:36:38 【问题描述】:

我有一个下拉导航。我希望下拉菜单在用户悬停“a”标签时滑动,并在鼠标离开下拉菜单或“a”标签时滑动。问题是,如果我这样写代码:

 $("#pageBottomNav ul li a").hover(function () 
    $(this).parent().children("ul#subNav").slideDown();
, function() 
  $(this).parent().children("ul#subNav").slideUp();
 
);

仅当我将鼠标悬停在“a”标签上时,下拉菜单才会显示,当我尝试将鼠标悬停在下拉菜单上时,它会再次向上滑动,因为上面代码的 mouseleave 事件。

另一方面,如果我这样写代码:

 $("#pageBottomNav ul li a").mouseenter(function () 
    $(this).parent().children("ul#subNav").slideDown();
);

$("#pageBottomNav ul li ul#subNav").mouseleave(function () 
    $(this).slideUp();
);

下拉菜单正确打开,但仅当用户将鼠标悬停在其上时才会关闭。但是,如果用户将鼠标悬停在“a”标签上而没有悬停在 #subNav 上,则下拉菜单不会关闭。

编辑: 问题是我处理了锚标签的悬停事件,而我应该对其父标签做同样的事情 - 列表项 (li) 标签。我改变了它们,一切正常。查看下面的代码

 $("#pageBottomNav ul li").hover(
    function () 
        $(this)
            .find("ul")
        .stop(true, true)
        .slideDown("easeInQuart");
,
    function () 
        $(this)
        .find("ul")
        .stop(true, true)
        .slideUp("easeInQuart");
);

【问题讨论】:

【参考方案1】:

这是我用来做类似事情的代码。不要定位 'a' 元素,只需使用整个 div。

$("#subnav").hover(
    //on mouseover
    function() 
      $(this).animate(
        height: '+=92'
        , 'fast' 
      );
    ,
    //on mouseout
    function() 
      $(this).animate(
        height: '-=92px'
        , 'fast'
      );
    
  );

【讨论】:

不幸的是,这对我不起作用,但这是因为我的情况有点不同。但是,我找到了一个解决方案,您可以在“编辑:”之后的帖子中找到它:)【参考方案2】:

所有你需要的:

$("#pageBottomNav ul li").hover(function () 
    $(">ul", this).stop().slideToggle();
);

【讨论】:

以上是关于jQuery:下拉导航 slideDown 和 slideUp的主要内容,如果未能解决你的问题,请参考以下文章

jQuery-4.动画篇---上卷下拉效果

JQuery动画

20款jquery下拉导航菜单特效代码分享

Angular2 中的 jQuery .slideUp() 和 .slideDown() 等效项

14. jQuery 的折叠动画

jQuery 如何实现 “鼠标悬浮下拉菜单” 效果?