带悬停的Bootstrap下拉列表

Dr.*_*eon 171 html javascript css jquery twitter-bootstrap

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

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

事情是它"有效onClick",而我更喜欢它是否有效" onHover".

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

brb*_*ing 321

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

.dropdown:hover .dropdown-menu {
    display: block;
    margin-top: 0; // remove the gap so it doesn't close
 }
Run Code Online (Sandbox Code Playgroud)

工作小提琴

  • 这将与内置的可折叠移动菜单冲突,因此您应将其包装在断点@media(min-width:480px)中 (46认同)
  • 另外值得注意的是:如果您有一个带有父子关系的下拉菜单,例如在wordpress主题中,您需要删除```data-toggle```属性以使父项可点击...只需观看移动屏幕上的附带损坏. (7认同)
  • @Micer 使用此 CSS 解决方案非常适合悬停,但如果您还单击该项目,则将鼠标移离该项目后,下拉列表仍然存在。这是因为单击会在“悬停”下拉菜单下方打开第二个下拉菜单。要解决此问题,请从子 <a> 元素中删除 data-toggle="dropdown" 属性,这将阻止单击打开重复的下拉列表 (5认同)
  • 比长期'全建'解决方案好得多.只需添加此项,默认的"点击"下拉列表就可以悬停而无需额外更改. (3认同)
  • 如果小提琴不起作用,您可以用以下行替换 CSS @import: `@import url('https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min .css');` (3认同)
  • 有一些简单的方法如何禁用单击显示并仅保持悬停行为? (2认同)

小智 65

执行此操作的最佳方法是使用悬停触发bootstraps click事件.这样,它应该仍然保持触摸设备友好

$('.dropdown').hover(function(){ 
  $('.dropdown-toggle', this).trigger('click'); 
});
Run Code Online (Sandbox Code Playgroud)

  • 如果您有多个下拉菜单,则会失败 (2认同)

小智 53

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

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

这是我的代码:

$(function(){
    $('.dropdown').hover(function() {
        $(this).addClass('open');
    },
    function() {
        $(this).removeClass('open');
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 比接受的答案更好的方式imho.这使得所有引导逻辑和样式保持不变.虽然我建议使用第二个回调并明确使用removeClass和addClass来防止当你点击按钮时出现一些奇怪的行为(当你离开按钮时它将打开,当你输入按钮时它会关闭). (10认同)
  • 我也认为这是最好的答案。要使其与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');});`(对不起,格式化。) (2认同)

Bia*_*ico 23

一个简单的方法,使用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);
    });  
});
Run Code Online (Sandbox Code Playgroud)


use*_*877 9

对于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');
        }
    }
});
Run Code Online (Sandbox Code Playgroud)


Ema*_*tar 6

在Twitter中,Bootstrap 未实现,但您可以使用此插件

更新1:

Sames 在这里提问


小智 6

将鼠标悬停在导航项上以查看它们是否在悬停时激活. http://cameronspear.com/demos/twitter-bootstrap-hover-dropdown/#


Cri*_*ora 5

因此,您有以下代码:

<a class="dropdown-toggle" data-toggle="dropdown">Show menu</a>

<ul class="dropdown-menu" role="menu">
    <li>Link 1</li>
    <li>Link 2</li> 
    <li>Link 3</li>                                             
</ul>
Run Code Online (Sandbox Code Playgroud)

通常,它适用于click事件,而您希望它适用于悬停事件。这非常简单,只需使用以下javascript / jquery代码即可:

$(document).ready(function () {
    $('.dropdown-toggle').mouseover(function() {
        $('.dropdown-menu').show();
    })

    $('.dropdown-toggle').mouseout(function() {
        t = setTimeout(function() {
            $('.dropdown-menu').hide();
        }, 100);

        $('.dropdown-menu').on('mouseenter', function() {
            $('.dropdown-menu').show();
            clearTimeout(t);
        }).on('mouseleave', function() {
            $('.dropdown-menu').hide();
        })
    })
})
Run Code Online (Sandbox Code Playgroud)

这很好用,这就是解释:我们有一个按钮和一个菜单。当我们将鼠标悬停在按钮上时,将显示菜单,当我们将鼠标悬停在按钮上时,将在100ms之后隐藏菜单。如果您想知道我为什么使用它,是因为您需要时间将光标从菜单上的按钮拖动。当您在菜单上时,时间将重置,您可以在此处停留任意多的时间。当您退出菜单时,我们将立即隐藏菜单,而不会发生任何超时。

我在许多项目中都使用过此代码,如果您在使用它时遇到任何问题,请随时向我提问。