html - Bootstrap 折叠导航栏并跳转到页面的特定部分
问题描述
我在 bootstrap 4 的帮助下创建了一个导航栏,但是在移动视图中折叠导航栏并同时跳转到锚点时遇到问题。如果我只添加href="#services",它会跳转到页面的相应部分,但导航栏保持打开状态。
<li class="nav-item">
<a class="nav-link" href="#services">Services</a>
</li>
如果我只将data-toggle="collapse"添加到链接中,则折叠也可以正常工作。
<li class="nav-item">
<a class="nav-link" data-toggle="collapse">Services</a>
</li>
但是,如果我同时添加它们两个,则只会崩溃,而跳跃则不会。
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#services">Services</a>
</li>
有人遇到同样的问题吗?你有这种行为的解决方法吗?(我遇到了几乎相同的问题,但我没有找到可行的解决方案。)
解决方案
您可以添加一个onClick
事件处理程序来检查导航栏是否未折叠并将其折叠。
在这里,我正在检查用于show
在移动视图上扩展导航栏的类。
请参阅JSFiddle。
展开导航栏并单击带有“链接”文本的链接
$(function() {
$(".nav-link:not(.dropdown-toggle)").click(function() {
let nav = $(".navbar-collapse");
if (nav.hasClass("show")) {
nav.removeClass("show");
}
})
})
.par {
margin: 10em 0;
}
<!-- CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<!-- jQuery and JS bundle w/ Popper.js -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
<nav class="navbar fixed-top 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">
<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="#d3">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="#" tabindex="-1" aria-disabled="true">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>
<div class="par" id="d1">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div class="par" id="d2">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div class="par" id="d3">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
推荐阅读
- activejdbc - 尝试使用 Base 而不是 DB 的资源
- php - 根据值将表行划分为不同的列
- r - 使用数据框在 R 中执行 getSunlightTimes 函数?
- scala - Scala:正确地将参数传递给 MethodMirror
- python - 有没有办法递归地编写这个函数?
- qt - Qt Design:两个 QDockWidgets 在规定的布局
- javascript - 如何仅使用javascript从innerHTML中选择一个元素
- reactjs - 在使用反应钩子渲染之前调度 redux 操作
- xamarin - 如何创建一个特定的类来打开 NavigationPages 的详细信息?
- c - 如何从另一个函数打印变量?