在“产品”上点击后,我会弹出一个白色的 div(如附图所示)。当处于响应式状态(移动设备和平板电脑)时,我希望自动关闭响应式导航栏,仅显示白色栏。
我尝试过:
$('.btn-navbar').click();
还尝试过:
$('.nav-collapse').toggle();
它确实有效。但是在桌面尺寸下,它也被称为并对菜单进行了一些奇怪的调整,使其在短暂的时间内缩小。
有什么想法吗?
在“产品”上点击后,我会弹出一个白色的 div(如附图所示)。当处于响应式状态(移动设备和平板电脑)时,我希望自动关闭响应式导航栏,仅显示白色栏。
我尝试过:
$('.btn-navbar').click();
还尝试过:
$('.nav-collapse').toggle();
它确实有效。但是在桌面尺寸下,它也被称为并对菜单进行了一些奇怪的调整,使其在短暂的时间内缩小。
有什么想法吗?
您无需为引导程序折叠选项中已包含的任何额外JavaScript添加任何内容。 相反,只需像在navbar-toggle按钮上一样,在菜单列表项上包含data-toggle和data-target选择器。 因此,对于您的“产品”菜单项,它应该像这样
<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse">Products</a></li>
那么您需要为每个菜单项重复使用data-toggle和data-target选择器
编辑!!!为了解决溢出问题和闪烁问题,我正在添加一些代码来修复这个问题,并且仍然没有任何额外的javascript。以下是新代码:
<li><a href="#products" class="hidden-xs">Products</a></li>
<li><a href="#products" class="visible-xs" data-toggle="collapse" data-target=".navbar-collapse">Products</a></li>
在这里可以看到它的工作效果:http://jsfiddle.net/jaketaylor/84mqazgq/
此方法将使您的切换和目标选择器针对不同屏幕尺寸,消除更大菜单上的故障。如果任何人仍然遇到问题,请告诉我,我会找到解决方法。 谢谢
编辑:在Bootstrap v4.1.3和v5.0中,我不能使用可见/隐藏类。 请使用d-none d-sm-block
代替hidden-xs
,使用d-block d-sm-none
代替visible-xs
。
编辑:在 Bootstrap v5 中,使用 data-bs-toggle
替代 data-toggle
,使用 data-bs-target
替代 data-target
。
data-toggle
和 data-target
属性添加到父级的 ul
或 div
标签上,而不是每个 li 元素上都添加。 - Jeremy<div id="nav-main" class="nav-collapse collapse">
<ul class="nav">
<li>
<a href='#somewhere'>Somewhere</a>
</li>
</ul>
</div>
在导航栏中将所有的a元素绑定点击事件来折叠菜单(使用Bootstrap折叠插件):在导航栏中将所有的a元素绑定点击事件来折叠菜单(使用Bootstrap折叠插件):
$(function(){
var navMain = $("#nav-main");
navMain.on("click", "a", null, function () {
navMain.collapse('hide');
});
});
编辑 为了使其更加通用,我们可以使用以下代码片段。
$(function(){
var navMain = $(".navbar-collapse"); // avoid dependency on #id
// "a:not([data-toggle])" - to avoid issues caused
// when you have dropdown inside navbar
navMain.on("click", "a:not([data-toggle])", null, function () {
navMain.collapse('hide');
});
});
a
е…ғзҙ пјҡдҪ еҸӘйңҖиҰҒи°ғз”Ё$("#nav-main").collapse('hide');
еҚіеҸҜгҖӮ - Ankit JainnavMain.on("click", "a:not([data-toggle])", null, function () {
。这样点击句柄将仅在没有"data-toggle"属性的链接上执行,即不是下拉菜单的链接上执行。还要使它更通用,最好使用var navMain = $(".navbar-collapse");
。我将相应地更新答案(希望你不介意)。 - Vivek Athalye我认为你过于工程化了。
$('.navbar-collapse ul li a').click(function(){
$('.navbar-toggle:visible').click();
});
编辑:为了处理子菜单,请确保它们的切换锚点上有dropdown-toggle类。
$(function () {
$('.navbar-collapse ul li a:not(.dropdown-toggle)').click(function () {
$('.navbar-toggle:visible').click();
});
});
编辑2:增加对手机触摸的支持。
$(function () {
$('.navbar-collapse ul li a:not(.dropdown-toggle)').bind('click touchstart', function () {
$('.navbar-toggle:visible').click();
});
});
const closeMenu=e=>{if(document.getElementById(e).classList.contains("show")){document.getElementsByClassName("navbar-toggler")[0].click()}};
- Lars Schellhas我非常喜欢Jake Taylor的想法,他的做法没有使用额外的JavaScript代码,而是利用了Bootstrap的折叠切换。我发现,通过微调data-target
选择器以包含in
类,可以解决菜单未处于折叠模式时出现“闪烁”问题。所以它看起来像这样:
<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.in">Products</a></li>
我没有在嵌套的下拉菜单中进行测试,所以您的情况可能有所不同。
只是为了完整起见,在Bootstrap 4.0.0-beta中,使用.show对我有效...
<li>
<a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.show">Products</a>
</li>
<div class="nav-collapse collapse" >
只需像在“MENU”按钮上一样添加属性即可。
<div class="nav-collapse collapse" data-toggle="collapse" data-target=".nav-collapse">
<body>
,它可以正常工作。虽然我没有进行过性能分析,但对我来说似乎是有效的...直到你点击 UI 的随机位置打开菜单,那就不太好了。这个可以运行,但是没有动画效果。
$('.btn-navbar').addClass('collapsed');
$('.nav-collapse').removeClass('in').css('height', '0');
<div id="navbar" class="navbar-collapse collapse" data-toggle="collapse" data-target=".navbar-collapse collapse">
这应该可以解决问题。
需要使用bootstrap.js。
示例 => http://getbootstrap.com/javascript/#collapse
$('.nav li a').click(function() {
$('#nav-main').collapse('hide');
});
这与在导航菜单标签中添加“data-toggle =“collapse””和“href =“yournavigationID””属性的效果相同。