Bootstrap 关闭响应式菜单“点击”

IT技术 javascript html css twitter-bootstrap
2021-02-10 06:33:22

在“产品”上单击我向上滑动一个白色 div(如附件所示)。在响应式(移动设备和平板电脑)中,我想自动关闭响应式导航栏并仅显示白色栏。

我试过:

$('.btn-navbar').click();  

也试过:

$('.nav-collapse').toggle();

它确实有效。然而,在桌面大小中,它也被称为并对它收缩一秒钟的菜单做了一些时髦的事情。

有任何想法吗?

在此处输入图片说明

6个回答

您不必向已包含在引导程序折叠选项中的内容添加任何额外的 javascript。相反,只需在菜单列表项中包含数据切换和数据目标选择器,就像使用导航栏切换按钮一样。所以对于您的产品菜单项,它看起来像这样

<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/

这将使您的切换和目标选择器特定于屏幕尺寸并消除较大菜单上的故障。如果有人仍然遇到故障问题,请告诉我,我会找到解决方法。谢谢

编辑:在引导程序 v4.1.3 中,我无法使用可见/隐藏类。代替hidden-xs使用d-none d-sm-block和代替visible-xs使用d-block d-sm-none

当导航未显示为“响应式”菜单时,这会导致闪烁和奇怪的东西。
2021-03-15 06:33:22
我删除了对这个答案的反对票和我之前的评论(也是因为视频不再有效)。由于我关于闪烁的评论对原始答案仍然有效,因此得到了一些赞成,并且您的“编辑”已明确标记,我认为没有理由删除它并重写历史记录。当时它是有效的,你做出了相应的反应。阅读您答案的人会看到“编辑”并知道您对此有所改进...
2021-03-20 06:33:22
您可以data-toggledata-target属性添加到每个 li 元素,而不是添加到父元素uldiv标签。
2021-03-21 06:33:22
这是正确的实现。不需要自定义 jQuery。
2021-03-30 06:33:22
@jrquick 这是真的..但很像我原来的答案,当你点击这个方法的链接时,你仍然会在更大的屏幕尺寸上出现故障。如果您找到了消除这种情况的方法,请发布小提琴,我会相应地更新我的答案。
2021-04-13 06:33:22

我已经让它与动画一起工作了!

html 中的菜单:

<div id="nav-main" class="nav-collapse collapse">
     <ul class="nav">
         <li>
             <a href='#somewhere'>Somewhere</a>
         </li>
     </ul>
 </div>

将导航中所有 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');
     });
 });
@mollwe 你有下拉菜单的解决方案吗?我做了一个 jsfiddle 来尝试,但即使是菜单也打不开。jsfiddle.net/Y3H92
2021-03-21 06:33:22
如果不是所有a元素:您只需要调用$("#nav-main").collapse('hide');
2021-04-02 06:33:22
抱歉@clankill3r 回复晚了!但迟到总比不到好。jsfiddle.net/mollwe/Y3H92/5
2021-04-08 06:33:22
@mollwe 用你的小提琴菜单对我来说根本不会关闭。
2021-04-09 06:33:22
@clankill3r 在我看来,缺少对 bootstrap.js 的引用,因此菜单不起作用。我更新了你的 jsfiddle:jsfiddle.net/Y3H92/1
2021-04-11 06:33:22

我认为你是工程师。。

    $('.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();
            });
    });
我认为 touchstart 有点多,点击效果很好。当您从按钮“开始”时,它如何响应滑动?
2021-03-25 06:33:22
这是完美的,谢谢!我已经把它变成了一个纯粹的 vanilla js 函数,我把它添加到了点击事件中。const closeMenu=e=>{if(document.getElementById(e).classList.contains("show")){document.getElementsByClassName("navbar-toggler")[0].click()}};
2021-04-05 06:33:22
应该是公认的答案。其他人过度设计和闪烁未响应的显示屏上。
2021-04-10 06:33:22
这可能是公认的答案,但它没有考虑到子菜单,实际上破坏了它们。其他一些“过度设计”的解决方案确实考虑到了这一点,尽管它们有缺点。下面的添加会解决这个问题: $(function () { $('.navbar-collapse ul li a:not(.dropdown-toggle)').click(function () { $('.navbar-toggle:可见').click(); }); });
2021-04-11 06:33:22
太好了,感谢您的编辑!
2021-04-12 06:33:22

我真的很喜欢 Jake Taylor 的想法,即无需额外的 JavaScript 并利用 Bootstrap 的折叠切换。我发现您可以通过data-target稍微修改选择器以包含in来修复菜单未处于折叠模式时出现的“闪烁”问题所以它看起来像这样:

<li><a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.in">Products</a></li>

我没有用嵌套的下拉菜单/菜单测试它,所以 YMMV。

迄今为止最好和最简单的答案。
2021-03-19 06:33:22
这对我来说也是最好的实现。
2021-04-05 06:33:22
一直试图让非闪烁崩溃工作一段时间,但这是迄今为止最简单和优雅的解决方案。谢谢!
2021-04-09 06:33:22
出于某种原因,我的 ScrollSpy 无法使用此方法,但可以与 Jake Taylor 的方法配合使用。
2021-04-13 06:33:22

只是为了完成,在 Bootstrap 4.0.0-beta 中使用.show为我工作......

<li>
  <a href="#Products" data-toggle="collapse" data-target=".navbar-collapse.show">Products</a>
</li>