gpt4 book ai didi

jquery - 如何从 bootstrap 文档中单击外部关闭此自定义 offcanvas 导航?

转载 作者:行者123 更新时间:2023-12-01 04:35:40 26 4
gpt4 key购买 nike

我正在使用 Bootstrap 4 文档中的 offcanvas 实验代码,但它并没有设计为当您单击菜单外部时关闭,这是我非常希望它做的事情。

我已经尝试了网络上的几个 jquery 片段,但它们利用了 bootstrap 的 .collapse,并且当我编辑它们以包含自定义 .offcanvas-collapse 类时,它们不起作用。

<nav class="navbar fixed-top navbar-dark bg-dark">
<button class="navbar-toggler p-0 border-0" type="button" data-toggle="offcanvas" data-target="#offcanvasNav" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
<i data-feather="menu"></i>
</button>
<a class="navbar-brand" href="#">Sleight of Word</a>
<button class="navbar-toggler p-0 border-0" type="button" data-toggle="searchBar">
<i data-feather="search"></i>
</button>
<form class="form-inline my-2 my-lg-0 d-none">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>

<div class="navbar-collapse offcanvas-collapse" id="offcanvasNav">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Dashboard <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Notifications</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Profile</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Switch account</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Settings</a>
<div class="dropdown-menu" aria-labelledby="dropdown01">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>

.offcanvas-collapse {
position: fixed;
top: 56px; /* Height of navbar */
bottom: 0;
right: 100%;
width: 240px;
padding-right: 1rem;
padding-left: 1rem;
overflow-y: auto;
visibility: hidden;
background-color: purple;
transition: visibility .2s ease-in-out, -webkit-transform .2s ease-in-out;
transition: transform .2s ease-in-out, visibility .2s ease-in-out;
transition: transform .2s ease-in-out, visibility .2s ease-in-out, -webkit-transform .2s ease-in-out;
}

.offcanvas-collapse.open {
visibility: visible;
-webkit-transform: translateX(100%);
transform: translateX(100%);
}


$(function () {
'use strict'

$('[data-toggle="offcanvas"]').on('click', function () {
$('.offcanvas-collapse').toggleClass('open')
})
})

$(document).on('click',function(){
$('.offcanvas-collapse').offcanvas-collapse('hide');
})

我希望这将使 offcanvas 导航可通过菜单按钮切换(打开和关闭),并在单击菜单外部时使导航关闭,但单击导航外部不会执行任何操作。

最佳答案

$(document).on('click',function(){
$('.offcanvas-collapse').toggleClass('open');
})

单独,将切换类 open在具有类 offcanvas-collapse 的所有元素上在你的文档中。如果元素具有该类,则将其删除,否则将添加该元素。

如果将上述内容与其他代码片段结合起来:

$(function () {
'use strict'

$('[data-toggle="offcanvas"]').on('click', function () {
$('.offcanvas-collapse').toggleClass('open')
})
})

...,每次点击[data-toggle="offcanvas"] ,两个片段都在运行(因为您单击 [data-toggle="offcanvas"] 但也单击 document (因为 click 事件一直冒泡到 document ,除非被阻止)。因此类 offcanvas-collapse 被切换两次,所以看起来好像不起作用。

这显然不是你想要的。

您可能想要:

  • 切换类(class) open.offcanvas-collapse[data-toggle="offcanvas"] 时的元素被点击但没有允许click事件传播到 document
  • 删除(不是切换)类 open来自.offcanvas-collapse在文档中的任意位置执行单击时的元素。如果您使用toggle ,一个clickdocument当 offcanvas 关闭时会打开它,这可能不是您想要的。

话虽这么说,这是实际的方法:

$(function () {
'use strict'

$(document)
.on('click', '[data-toggle="offcanvas"]', function(e) {
$('.offcanvas-collapse').toggleClass('open'); // toggle `.open`
e.stopPropagation(); // and stop propagation
})
.on('click', function() {
$('.offcanvas-collapse').removeClass('open'); // remove `.open`
});
})

编辑:根据评论请求,要仅在单击导航栏外部时关闭 Canvas 外,请替换第二个 .on()与这个:

.on('click', function(e) {
if (!$(e.target).closest('nav.fixed-top').is('nav')) {
$('.offcanvas-collapse').removeClass('open'); // remove `.open`
}
});

它检查单击的目标是否在 <nav> 内与类fixed-top .

关于jquery - 如何从 bootstrap 文档中单击外部关闭此自定义 offcanvas 导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57259093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com