好的,我需要的内容非常简单。
我设置了一个带有下拉菜单的导航栏(使用class="dropdown-toggle" data-toggle="dropdown"
),它可以正常工作。
问题是它是"onClick
"触发的,但我更喜欢它在"onHover
"时触发。
有没有内置的方法来实现这个效果?
好的,我需要的内容非常简单。
我设置了一个带有下拉菜单的导航栏(使用class="dropdown-toggle" data-toggle="dropdown"
),它可以正常工作。
问题是它是"onClick
"触发的,但我更喜欢它在"onHover
"时触发。
有没有内置的方法来实现这个效果?
.dropdown:hover .dropdown-menu {
display: block;
margin-top: 0; /* remove the gap so it doesn't close */
}
data-toggle
属性以使父项可点击......但要注意在移动屏幕上可能会出现的副作用。 - Ken Prince最好的方法是使用悬停触发Bootstrap的点击事件。这样,它仍然可以保持对触摸设备的友好性。
$('.dropdown').hover(function(){
$('.dropdown-toggle', this).trigger('click');
});
.blur()
:$('.dropdown-toggle',this).trigger('click')。blur();
- Filipe您可以使用jQuery的hover
函数。
当鼠标进入下拉菜单时,只需添加类open
,并在鼠标离开时删除该类。
这是我的代码:
$(function(){
$('.dropdown').hover(function() {
$(this).addClass('open');
},
function() {
$(this).removeClass('open');
});
});
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');});
(对排版问题表示抱歉)。 - Robin Zimmermann使用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);
});
});
.first()
。$(this).find('.dropdown-menu').first().stop(true, true).delay(200).fadeIn(200);
- flydevCSS在点击时会疯狂跳动。这是我正在使用的代码,它在移动视图中也不会改变任何内容。
$('.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');
}
}
});
所以你有这段代码:
<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>
通常它在点击事件下工作,而你希望它在鼠标悬停事件下工作。这很简单,只需使用这个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();
})
})
})
我在许多项目中都使用了这个代码,如果你使用它遇到任何问题,请随时向我提问。
/* Hover dropdown */
.hover_drop_down.input-group-btn ul.dropdown-menu{margin-top: 0px;}/*To avoid unwanted close*/
.hover_drop_down.btn-group ul.dropdown-menu{margin-top:2px;}/*To avoid unwanted close*/
.hover_drop_down:hover ul.dropdown-menu{
display: block;
}
边距是用来避免不必要的紧密排列的,但它们是可选的。
HTML:
<div class="btn-group hover_drop_down">
<button type="button" class="btn btn-default" data-toggle="dropdown"></button>
<ul class="dropdown-menu" role="menu">
...
</ul>
</div>
如果您想删除“onclick”打开方式,请不要忘记删除按钮属性data-toggle="dropdown",并且在附加下拉菜单时也会起作用。
我发布了一个适当的插件,用于下拉悬停功能,您甚至可以定义在单击dropdown-toggle
元素时发生什么:
https://github.com/istvan-ujjmeszaros/bootstrap-dropdown-hover
我遇到了所有先前存在的解决方案的问题。简单的CSS解决方案没有在.dropdown
上使用.open
类,因此当下拉菜单可见时,下拉切换元素不会有任何反馈。
js解决方案干扰了单击.dropdown-toggle
,因此当悬停时下拉菜单显示出来,然后在单击打开的下拉菜单时隐藏它,并且移动鼠标会触发下拉菜单再次显示出来。一些js解决方案破坏了iOS兼容性,一些插件在支持触摸事件的现代桌面浏览器上无法工作。
这就是为什么我制作了Bootstrap Dropdown Hover插件,它通过仅使用标准的Bootstrap JavaScript API而没有任何黑客来防止所有这些问题。