How to make Twitter Bootstrap menu dropdown on hover rather than click

后端 未结 30 2598
小鲜肉
小鲜肉 2020-11-22 02:08

I\'d like to have my Bootstrap menu automatically drop down on hover, rather than having to click the menu title. I\'d also like to lose the little arrows next to the menu t

相关标签:
30条回答
  • 2020-11-22 02:38

    If you have an element with a dropdown class like this (for example):

    <ul class="list-unstyled list-inline">
        <li class="dropdown">
            <a data-toggle="dropdown" href="#"><i class="fa fa-bars"></i> Dropdown 1</a>
            <ul class="dropdown-menu">
                <li><a href="">Item 1</a></li>
                <li><a href="">Item 2</a></li>
                <li><a href="">Item 3</a></li>
                <li><a href="">Item 4</a></li>
                <li><a href="">Item 5</a></li>
            </ul>
        </li>
        <li class="dropdown">
            <a data-toggle="dropdown" href="#"><i class="fa fa-user"></i> Dropdown 2</a>
            <ul class="dropdown-menu">
                <li><a href="">Item A</a></li>
                <li><a href="">Item B</a></li>
                <li><a href="">Item C</a></li>
                <li><a href="">Item D</a></li>
                <li><a href="">Item E</a></li>
            </ul>
        </li>
    </ul>
    

    Then you can have the dropdown menu to be automatically drop down on hover over, rather than having to click its title, by using this snippet of jQuery code:

    <script>
        $('.dropdown').hover(
            function() {
                $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn();
            },
            function() {
                $(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut();
            }
        );
    
        $('.dropdown-menu').hover(
            function() {
                $(this).stop(true, true);
            },
            function() {
                $(this).stop(true, true).delay(200).fadeOut();
            }
        );
    </script>
    

    Here is a demo

    This answer relied on @Michael answer, I have made some changes and added some additions to get the dropdown menu work properly

    0 讨论(0)
  • 2020-11-22 02:39

    Overwrite bootstrap.js with this script.

    jQuery(document).ready(function ($) {
    $('.navbar .dropdown').hover(function() {
        $(this).addClass('extra-nav-class').find('.dropdown-menu').first().stop(true, true).delay(250).slideDown();
    }, function() {
        var na = $(this)
        na.find('.dropdown-menu').first().stop(true, true).delay(100).slideUp('fast', function(){ na.removeClass('extra-nav-class') })
    });
    
    $('.dropdown-submenu').hover(function() {
        $(this).addClass('extra-nav-class').find('.dropdown-menu').first().stop(true, true).delay(250).slideDown();
    }, function() {
        var na = $(this)
        na.find('.dropdown-menu').first().stop(true, true).delay(100).slideUp('fast', function(){ na.removeClass('extra-nav-class') })
    });
    
    }); 
    
    0 讨论(0)
  • 2020-11-22 02:40

    Here's my technique that adds a slight delay before the menu is closed after you stop hovering on the menu or the toggle button. The <button> that you would normally click to display the nav menu is #nav_dropdown.

    $(function() {
      var delay_close_it, nav_menu_timeout, open_it;
      nav_menu_timeout = void 0;
      open_it = function() {
        if (nav_menu_timeout) {
          clearTimeout(nav_menu_timeout);
          nav_menu_timeout = null;
        }
        return $('.navbar .dropdown').addClass('open');
      };
      delay_close_it = function() {
        var close_it;
        close_it = function() {
          return $('.navbar .dropdown').removeClass('open');
        };
        return nav_menu_timeout = setTimeout(close_it, 500);
      };
      $('body').on('mouseover', '#nav_dropdown, #nav_dropdown *', open_it).on('mouseout', '#nav_dropdown', delay_close_it);
      return $('body').on('mouseover', '.navbar .dropdown .dropdown-menu', open_it).on('mouseout', '.navbar .dropdown .dropdown-menu', delay_close_it);
    });
    
    0 讨论(0)
  • 2020-11-22 02:42

    This is built into Bootstrap 3. Just add this to your CSS:

    .dropdown:hover .dropdown-menu {
        display: block;
    }
    
    0 讨论(0)
  • 2020-11-22 02:44

    This worked for me:

    .dropdown:hover .dropdown-menu {
        display: block;
    }
    
    0 讨论(0)
  • 2020-11-22 02:44

    The best way of doing it is to just trigger Bootstrap's click event with a hover. This way, it should still remain touch device friendly.

    $('.dropdown').hover(function(){ 
      $('.dropdown-toggle', this).trigger('click'); 
    });
    
    0 讨论(0)
提交回复
热议问题