Bootstrap下拉菜单默认需要通过点击,才可以打开,在管理系统的开发过程中,使用悬停代替点击能减少一步操作,更人性化。
一、纯css样式控制。
.dropdown:hover .dropdown-menu { display: block; margin-top: 0; // remove the gap so it doesn't close }
优点:实现简单,无需借助js。
缺点:触发按钮跟下拉菜单之间不能有间隙,否则一失焦下拉菜单就会消失。
二、插件实现。
bootstrap-hover-dropdown 插件可以实现此功能。
<!-- script order matters! -->
<script src="/path/to/jquery.min.js"></script>
<script src="/path/to/bootstrap.min.js"></script>
<script src="/path/to/bootstrap-hover-dropdown.min.js"></script>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">
Account <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#">菜单一</a></li>
</ul>
</li>
优点:使用简单。
缺点:该插件存在不确定性BUG,且自从2015年底至今一直没有维护更新。
(亲历:多行表格中,每行都有dropdown按钮,hover时有时显示不正常)。
三、css+hover+timeout实现。
基于方案一,通过样式控制是否显示,通过hover事件控制是否添加样式,通过timeout解决异常失焦问题。
.dropdown.hover .dropdown-menu { display: block; margin-top: 0; } $('[data-toggle="dropdown"]').hover(function(){ var $parents = $(this).parents('.dropdown'); window.dropDownTimer&&clearTimeout(window.dropDownTimer); $('.dropdown').removeClass('hover'); $parents.addClass('hover'); },function(){ var $parents = $(this).parents('.dropdown'); window.dropDownTimer = setTimeout(function(){ $parents.removeClass('hover'); },500) })