Bootstrap 4 scrollspy 无法更改活动的导航栏项目
Bootstrap 4 scrollspy not working to change active navbar items
我正在使用 Bootstrap 4.0 创建一个简单的登录页面并在此页面中使用 ScrollSpy 但我无法使其工作,它不会更改活动菜单项。
index.html -
<body>
<!-- Navbar -->
<nav id="main-nav" class="navbar navbar-expand-lg bg-light bg-transparent fixed-top">
<div class="container">
<a class="navbar-brand" href="#"><!-- some logo --></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 justify-content-end" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="#header">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#book">About Book</a></li>
<li class="nav-item"><a class="nav-link" href="#author">About Author</a></li>
<li class="nav-item"><a class="nav-link" href="#inspire">Inspire</a></li>
</ul>
</div>
</div>
</nav>
<!-- Header -->
<header id="header" class="header">
<!-- some content -->
</header>
<!-- About book -->
<section id="book" class="book py-5">
<!-- some content -->
</section>
<!-- About author -->
<section id="author" class="author py-5">
<!-- some content -->
</section>
<!-- Inspire -->
<section id="inspire" class="author py-5">
<!-- some content -->
</section>
<!-- JavaScript -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.min.js"></script>
</body>
我的 style.css
文件中有 body{postsition: relative}
。
main.js -
$(document).ready(function () {
// Scroll spy
$('body').scrollspy({
target: "#main-nav",
offset: 70
});
// Navbar fade
changeNavbar();
$(window).scroll(function () {
changeNavbar();
});
function changeNavbar() {
var navbar = $("#main-nav");
if ($(this).scrollTop() >= 100) {
navbar.addClass("bg-light").removeClass("bg-transparent");
} else if ($(this).scrollTop() < 100) {
navbar.removeClass("bg-light").addClass("bg-transparent");
}
}
});
我搜索了很多但没有得到任何解决方案,已经浪费了几个小时,我们将不胜感激。
提前致谢。
ScrollSpy 组件正在将 active
class 应用到 nav-item
,但您看不到它,因为您没有 navbar-light
class 在导航栏中。
Bootstrap 4 CSS 应用样式(较深文本颜色)的选择器是这样的:
.navbar-light .navbar-nav .nav-link.active {
color: rgba(0, 0, 0, 0.9);
}
所以,只需像这样添加 navbar-light
class:
<nav id="main-nav" class="navbar navbar-expand-lg navbar-light bg-light bg-transparent fixed-top">
</nav>
我花了几天时间试图解决这个问题!我什至建立了一个单独的本地网站并从 W3Schools 复制代码来构建一个干净的页面,但无法让它工作。我终于绊倒了这个:
根据 bootstrap 文档 (https://getbootstrap.com/docs/4.3/components/scrollspy/),"When spying on elements other than the , be sure to have a height set and overflow-y: scroll; applied."
我将此:style="overflow-y: scroll; height: 1500px;"
添加到具有 data-spy="scroll" data-target="#myScrollspy"
的同一元素,它开始工作了。神奇的是 overflow-y: scroll
。不设置高度会使水平滚动条处于难看的位置。
高度小于屏幕高度也会在其上放置一个水平滚动条。 height: 100%
也没用。
工作示例在这里:http://www.ladybugsrule.net/BootstrapExamples/ScrollSpy.html
只需添加此 Jquery 代码
$(window).scroll(function(){
$(".nav-item").removeClass("active");
$(".active").parent().addClass("active");
})
它会根据活动导航项自动添加和删除活动 class 到导航项 link
我正在使用 Bootstrap 4.0 创建一个简单的登录页面并在此页面中使用 ScrollSpy 但我无法使其工作,它不会更改活动菜单项。
index.html -
<body>
<!-- Navbar -->
<nav id="main-nav" class="navbar navbar-expand-lg bg-light bg-transparent fixed-top">
<div class="container">
<a class="navbar-brand" href="#"><!-- some logo --></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 justify-content-end" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="#header">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#book">About Book</a></li>
<li class="nav-item"><a class="nav-link" href="#author">About Author</a></li>
<li class="nav-item"><a class="nav-link" href="#inspire">Inspire</a></li>
</ul>
</div>
</div>
</nav>
<!-- Header -->
<header id="header" class="header">
<!-- some content -->
</header>
<!-- About book -->
<section id="book" class="book py-5">
<!-- some content -->
</section>
<!-- About author -->
<section id="author" class="author py-5">
<!-- some content -->
</section>
<!-- Inspire -->
<section id="inspire" class="author py-5">
<!-- some content -->
</section>
<!-- JavaScript -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.min.js"></script>
</body>
我的 style.css
文件中有 body{postsition: relative}
。
main.js -
$(document).ready(function () {
// Scroll spy
$('body').scrollspy({
target: "#main-nav",
offset: 70
});
// Navbar fade
changeNavbar();
$(window).scroll(function () {
changeNavbar();
});
function changeNavbar() {
var navbar = $("#main-nav");
if ($(this).scrollTop() >= 100) {
navbar.addClass("bg-light").removeClass("bg-transparent");
} else if ($(this).scrollTop() < 100) {
navbar.removeClass("bg-light").addClass("bg-transparent");
}
}
});
我搜索了很多但没有得到任何解决方案,已经浪费了几个小时,我们将不胜感激。
提前致谢。
ScrollSpy 组件正在将 active
class 应用到 nav-item
,但您看不到它,因为您没有 navbar-light
class 在导航栏中。
Bootstrap 4 CSS 应用样式(较深文本颜色)的选择器是这样的:
.navbar-light .navbar-nav .nav-link.active {
color: rgba(0, 0, 0, 0.9);
}
所以,只需像这样添加 navbar-light
class:
<nav id="main-nav" class="navbar navbar-expand-lg navbar-light bg-light bg-transparent fixed-top">
</nav>
我花了几天时间试图解决这个问题!我什至建立了一个单独的本地网站并从 W3Schools 复制代码来构建一个干净的页面,但无法让它工作。我终于绊倒了这个:
根据 bootstrap 文档 (https://getbootstrap.com/docs/4.3/components/scrollspy/),"When spying on elements other than the , be sure to have a height set and overflow-y: scroll; applied."
我将此:style="overflow-y: scroll; height: 1500px;"
添加到具有 data-spy="scroll" data-target="#myScrollspy"
的同一元素,它开始工作了。神奇的是 overflow-y: scroll
。不设置高度会使水平滚动条处于难看的位置。
高度小于屏幕高度也会在其上放置一个水平滚动条。 height: 100%
也没用。
工作示例在这里:http://www.ladybugsrule.net/BootstrapExamples/ScrollSpy.html
只需添加此 Jquery 代码
$(window).scroll(function(){
$(".nav-item").removeClass("active");
$(".active").parent().addClass("active");
})
它会根据活动导航项自动添加和删除活动 class 到导航项 link