带有悬停的 Bootstrap 下拉菜单

IT技术 javascript jquery html css twitter-bootstrap
2021-02-10 20:05:54

好的,所以我需要的是相当简单的。

我已经设置了一个带有一些下拉菜单的导航栏(使用class="dropdown-toggle" data-toggle="dropdown"),它工作正常。

问题是它有效“ onClick”,而我更喜欢它“ onHover”。

有没有内置的方法来做到这一点?

6个回答

最简单的解决方案是在 CSS 中。添加类似...

.dropdown:hover .dropdown-menu {
    display: block;
    margin-top: 0; // remove the gap so it doesn't close
 }

工作小提琴

是否有一些简单的方法可以禁用点击显示并仅保持悬停行为?
2021-03-19 20:05:54
这将与内置的可折叠移动菜单冲突,因此您应该将其包装在断点 @media (min-width:480px) 中
2021-03-22 20:05:54
同样值得注意的是:如果您有一个带有父子关系的下拉菜单,例如在 wordpress 主题中,您需要删除该data-toggle属性以使父项可点击......只需注意移动屏幕上的附带损坏。
2021-04-01 20:05:54
@Micer 使用此 CSS 解决方案非常适合悬停,但如果您还单击该项目,则将鼠标移离该项目后,下拉列表仍然存在。这是因为单击会在“悬停”下拉菜单下方打开第二个下拉菜单。要解决此问题,请从子 <a> 元素中删除 data-toggle="dropdown" 属性,这将阻止单击打开重复的下拉列表
2021-04-06 20:05:54
比长期的“完整构建”解决方案要好得多。只需添加此项,默认的“点击”下拉菜单即可悬停,无需额外更改。
2021-04-10 20:05:54

最好的方法是通过悬停触发引导程序单击事件。这样,它应该仍然保持触摸设备友好

$('.dropdown').hover(function(){ 
  $('.dropdown-toggle', this).trigger('click'); 
});
使用多个下拉菜单需要一些“最接近”的过滤。
2021-03-18 20:05:54
一旦下拉菜单关闭,有没有办法删除 Active 类?
2021-03-22 20:05:54
不使用父链接
2021-03-25 20:05:54
如果您有多个下拉级别,则失败
2021-03-30 20:05:54
下拉元素和菜单之间有一个像素间隙,这会导致菜单有时会隐藏,除非你很快
2021-04-02 20:05:54

您可以使用 jQuery 的悬停功能。

您只需要open在鼠标进入时添加类并在鼠标离开下拉列表时删除类。

这是我的代码:

$(function(){
    $('.dropdown').hover(function() {
        $(this).addClass('open');
    },
    function() {
        $(this).removeClass('open');
    });
});
如果您有两个下拉菜单项,则不起作用。悬停在任何下拉项目上将显示两个子菜单
2021-03-15 20:05:54
比接受的答案好得多恕我直言。这使所有引导程序逻辑和样式保持完整。虽然我建议使用第二个回调并明确使用 removeClass 和 addClass 来防止在您单击按钮时出现一些奇怪的行为(当您离开按钮时它会打开并在您输入时关闭)。
2021-03-18 20:05:54
我也认为这是最好的答案。为了让它与 Bootstrap 4 菜单一起使用,我必须使用show代替open,并且还包括dropdown-menu:($('.dropdown').hover(function() { $(this).addClass('show'); $(this).find('.dropdown-menu').addClass('show');}, function() {$(this).removeClass('show'); $(this).find('.dropdown-menu').removeClass('show');});抱歉格式化。)
2021-03-18 20:05:54

使用 jQuery 的一种简单方法是:

$(document).ready(function(){
    $('ul.nav li.dropdown').hover(function() {
      $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(200);
    }, function() {
      $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(200);
    });  
});
我喜欢平滑的过渡,但是它会导致所有级别的菜单扩展,而不仅仅是第一级。我不希望出现二级菜单,直到我将鼠标悬停在他们的父级上。
2021-03-30 20:05:54
要仅获得第一级,请添加.first() - $(this).find('.dropdown-menu').first().stop(true, true).delay(200).fadeIn(200);...
2021-04-11 20:05:54

对于 CSS,当你也点击它时它会变得疯狂。这是我正在使用的代码,它也不会更改移动视图的任何内容。

$('.dropdown').mouseenter(function(){
    if(!$('.navbar-toggle').is(':visible')) { // disable for mobile view
        if(!$(this).hasClass('open')) { // Keeps it open when hover it again
            $('.dropdown-toggle', this).trigger('click');
        }
    }
});
一个美女!发送!CSS 替代方案不适用于 Bootstrap 3 及更高版本。
2021-04-06 20:05:54