在“产品”上单击我向上滑动一个白色div(如附图所示)。在响应式(移动设备和平板电脑)时,我想自动关闭响应式导航栏并仅显示白色条。
我试过了:
$('.btn-navbar').click();
也尝试过:
$('.nav-collapse').toggle();
它确实有效。然而,在桌面大小的情况下,它也会被调用并对菜单做一些时髦的事情,它会缩短一秒钟。
有什么想法吗?
答案 0 :(得分:130)
您不必添加任何额外的javascript到bootstraps折叠选项中已包含的内容。而只需在菜单列表项上包含数据切换和数据目标选择器,就像使用导航栏切换按钮一样。因此,对于您的“产品”菜单项,它看起来像这样
<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse">Products</a></li>
然后,您需要为每个菜单项重复数据切换和数据目标选择器
修改!!! 强> 为了解决溢出问题和闪烁这个修复我正在添加一些代码,将解决这个问题,但仍然没有任何额外的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中,我无法使用可见/隐藏类。而不是hidden-xs
使用d-none d-sm-block
而不是visible-xs
使用d-block d-sm-none
。
答案 1 :(得分:92)
我已经开始使用动画了!
html中的菜单:
<div id="nav-main" class="nav-collapse collapse">
<ul class="nav">
<li>
<a href='#somewhere'>Somewhere</a>
</li>
</ul>
</div>
将导航中所有元素的点击事件绑定到折叠菜单(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');
});
});
答案 2 :(得分:38)
我认为你们全都在工程......
$('.navbar-collapse ul li a').click(function(){
$('.navbar-toggle:visible').click();
});
编辑:要处理子菜单,请确保其切换锚点上有下拉切换类。
$(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();
});
});
答案 3 :(得分:35)
我真的很喜欢Jake Taylor在没有额外的JavaScript并且利用Bootstrap崩溃切换的情况下这样做的想法。我发现通过略微修改data-target
选择器以包含in
类,可以解决菜单未处于折叠模式时出现的“闪烁”问题。所以它看起来像这样:
<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.in">Products</a></li>
我没有使用嵌套下拉列表/菜单测试它,所以YMMV。
答案 4 :(得分:7)
只是为了完成,在Bootstrap 4.0.0-beta中使用 .show 为我工作......
<li>
<a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.show">Products</a>
</li>
答案 5 :(得分:4)
这有效,但没有动画。
$('.btn-navbar').addClass('collapsed');
$('.nav-collapse').removeClass('in').css('height', '0');
答案 6 :(得分:4)
我假设你有一条像这样定义导航区域的线,基于Bootstrap示例和所有
<div class="nav-collapse collapse" >
只需添加属性,例如在MENU按钮上
<div class="nav-collapse collapse" data-toggle="collapse" data-target=".nav-collapse">
我也加入了<body>
,工作了。不能说我已经对它进行了分析,但对我来说似乎是一种享受...直到你点击UI的随机点来打开菜单,所以不那么好。
DK
答案 7 :(得分:3)
这个解决方案在桌面和移动设备上都做得很好。
<div id="navbar" class="navbar-collapse collapse" data-toggle="collapse" data-target=".navbar-collapse collapse">
答案 8 :(得分:3)
在HTML中,我在每个导航链接的 a 标记中添加了一类 nav-link 。
$('.nav-link').click(
function () {
$('.navbar-collapse').removeClass('in');
}
);
答案 9 :(得分:2)
只是拼出user1040259的解决方案,将此代码添加到$(document).ready(function(){});
$('.nav').click( function() {
$('.btn-navbar').addClass('collapsed');
$('.nav-collapse').removeClass('in').css('height', '0');
});
正如他们所提到的,这并没有动画移动...但它确实关闭项目选择的导航栏
答案 10 :(得分:2)
对于那些使用AngularJS和Angular UI路由器的人来说,这是我的解决方案(使用mollwe的切换)。 “.navbar-main-collapse”是我的“数据目标”。
创建指令:
module.directive('navbarMainCollapse', ['$rootScope', function ($rootScope) {
return {
restrict: 'C',
link: function (scope, element) {
//watch for state/route change (Angular UI Router specific)
$rootScope.$on('$stateChangeSuccess', function () {
if (!element.hasClass('collapse')) {
element.collapse('hide');
}
});
}
};
}]);
使用指令:
<div class="collapse navbar-collapse navbar-main-collapse">
<your menu>
答案 11 :(得分:1)
不是最新的主题,但我搜索了同一个问题的解决方案并找到了一个(其他一些的混合)。
我给了NavButton:
<type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> ...
id / Identifier like:
<button id="navcop" type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
不是最好的“理念” - 但是:对我有用! 现在,您可以检查按钮的可见性(使用jquery),如:
var target = $('#navcop');
if(target.is(":visible")){
$('#navcop').click();
}
(注意:这只是一个代码剪断!我在导航链接上使用了“onclick”事件!(启动AJAX Reguest。)
结果是:如果Button是“可见的”它被“点击”......所以:如果你使用Bootstrap的“全屏视图”(宽度超过940px),则没有错误。
问候 拉尔夫
PS:它适用于IE9,IE10和Firefox 25.没有检查过其他人 - 但我看不到问题: - )
答案 12 :(得分:1)
这应该可以解决问题。
需要bootstrap.js。
示例=&gt; http://getbootstrap.com/javascript/#collapse
$('.nav li a').click(function() {
$('#nav-main').collapse('hide');
});
这与将“data-toggle =”collapse“'和'href =”yournavigationID“'属性添加到导航菜单标签的功能相同。
答案 13 :(得分:1)
我正在使用mollwe功能,虽然我添加了2项改进:
a)如果点击的链接已折叠(包括其他链接),请避免关闭下拉列表
b)如果点击可见的网页内容,也要隐藏下拉列表。
jQuery.fn.exists = function() {
return this.length > 0;
}
$(function() {
var navMain = $(".navbar-collapse");
navMain.on("click", "a", null, function() {
if ($(this).attr("href") !== "#") {
navMain.collapse('hide');
}
});
$("#content").bind("click", function() {
if ($(".navbar-collapse.navbar-ex1-collapse.in").exists()) {
navMain.collapse('hide');
}
});
});
答案 14 :(得分:1)
这对我有用。我已经这样做了,当我点击菜单按钮时,即时添加或删除课程&#39; in&#39;因为通过添加或删除该类,默认情况下切换功能正常。 &#39; e.stopPropagation()&#39;是通过bootstrap停止默认动画(我猜)你也可以使用&#39; toggleClass&#39;代替添加或删除类。
$(&#39;#ChangeToggle&#39;)。on(&#39;点击&#39;,功能(e){
if ($('.navbar-collapse').hasClass('in')) {
$('.navbar-collapse').removeClass('in');
e.stopPropagation();
} else {
$('.navbar-collapse').addClass('in');
$('.navbar-collapse').collapse();
}
});
答案 15 :(得分:0)
例如,如果您的可切换图标仅对超小型设备可见,那么您可以执行以下操作:
$('[data-toggle="offcanvas"]').click(function () {
$('#side-menu').toggleClass('hidden-xs');
});
单击[data-toggle =“offcanvas”]会将bootstrap的.hidden-xs添加到我的#side-menu,这将隐藏侧边菜单内容,但如果增加窗口大小,将再次显示。
答案 16 :(得分:0)
如果菜单html是
library(data.table)
DT1 <- data.table(
Part = c("A", "B", "C"),
Code = c(1, 3, 1),
PartTo = c(NA, "D", NA)
)
DT2 <- data.table(
Part = c("A", "B", "C"),
Info = c(1, 3, 1)
)
导航切换&#39;在&#39;从切换中添加和删除类。检查是否打开了响应式菜单,然后执行关闭切换。
DT2[DT1$Code == 3, Part := DT1$PartTo]
答案 17 :(得分:0)
你小心使用
ul.nav {
display: none;
}
默认关闭导航栏。 请让我知道有人发现这个有用的
答案 18 :(得分:0)
与IE浏览器兼容的答案,没有任何控制台错误。 如果您使用的是引导程序,请使用此
$('.nav li a').on('click', function () {
if ($("#navbar").hasClass("in")) {
$('.navbar-collapse.in').show();
}
else {
$('.navbar-collapse.in').hide();
}
})
答案 19 :(得分:-1)
$('.navbar-toggle').trigger('click');
答案 20 :(得分:-1)
没有任何Javascript的Bootstrap 4解决方案
将属性data-toggle="collapse" data-target="#navbarSupportedContent.show"
添加到div <div class="collapse navbar-collapse">
确保在id
中提供正确的data-target
<div className="collapse navbar-collapse" id="navbarSupportedContent" data-toggle="collapse" data-target="#navbarSupportedContent.show">
.show
是为了避免高分辨率菜单闪烁
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent" data-toggle="collapse" data-target="#navbarSupportedContent.show">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>