【发布时间】:2021-02-12 05:06:07
【问题描述】:
我是香草 js 的新手。我有一个带有部分链接的导航栏。我想在该部分激活后立即激活该类。如果没有活动部分,则删除活动类。找到了这样一个script,但是有一个缺点。如果我在非活动部分,活动类将保留在前一个活动部分。
const links = document.querySelectorAll('.nav-link');
const sections = document.querySelectorAll('.forJS');
function changeLinkState() {
let index = sections.length;
while(--index && window.scrollY + 50 < sections[index].offsetTop) {}
links.forEach((link) => link.classList.remove('active'));
links[index].classList.add('active');
}
changeLinkState();
window.addEventListener('scroll', changeLinkState);
section{
height:100vh;
scroll-y:auto;
}
.nav-link.active{
color: red;
}
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet"/>
<body>
<header class="fixed-top">
<nav class="navbar navbar-expand-lg navCustom">
<div class="container">
<ul class="navbar-nav justify-content-center">
<li class="nav-item">
<a class="nav-link" href="#main">Main</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#about">About us</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#portfolio">Portfolio</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#contacts">Contacts</a>
</li>
</ul>
</div>
</nav>
</header>
<section class="forJS text-center">Some info 1</section>
<section class="forJS text-center">Some info 2</section>
<section class="forJS text-center">Some info 3</section>
<section class="text-center">Some info 4</section>
<section class="text-center">Some info 5</section>
<section class="text-center">Some info 6</section>
<section class="text-center">Some info 7</section>
<section class="text-center">Some info 8</section>
<section class="text-center">Some info 9</section>
<section class="forJS text-center">Some info 10</section>
</body>
P.S.看最后一行,有changeLinkState。是不是应该不带括号()?
而且while里面是空的,为什么?
【问题讨论】:
-
Why While is Empty 阅读这里
-
一切都清楚了,谢谢!如果没有部分处于活动状态,只需弄清楚如何删除类
active。 -
NO 部分处于活动状态是什么意思?当您滚动到最后一个部分,即第 10 部分时,您无法滚动,因此它处于活动状态。只需将
border: 1px solid black;添加到您的section CSS,您就会发现哪个部分处于活动状态。 -
如果用户在第 4 到第 9 节中,我不希望
nav-links有active类。我希望nav-link有一个active类,只有当我们在这个nav-link链接到的section上时。
标签: javascript html css