Javascript 滚动时的活动导航错误-Vanilla JS
我试图使一个积极的国家导航菜单的锚链接是突出显示,一旦他们滚动到每个部分。我刚刚测试了我的站点,并收到以下错误: 未捕获的DomeException:未能对“文档”执行“querySelector”:提供的选择器为空 NodeList.forEach() 错误针对此代码:Javascript 滚动时的活动导航错误-Vanilla JS,javascript,html,css,Javascript,Html,Css,我试图使一个积极的国家导航菜单的锚链接是突出显示,一旦他们滚动到每个部分。我刚刚测试了我的站点,并收到以下错误: 未捕获的DomeException:未能对“文档”执行“querySelector”:提供的选择器为空 NodeList.forEach() 错误针对此代码: navLinks.forEach(link => { let section = document.querySelector(link.hash); 我以前从未见过这些,我很困惑我该怎么做。谢谢大家! --H
navLinks.forEach(link => {
let section = document.querySelector(link.hash);
我以前从未见过这些,我很困惑我该怎么做。谢谢大家!
--HTML--
<div class="menu">
<div class="top-nav">
<div class="logo">
<h1>Store</h1>
</div>
<div class="close">
<i class="bx bx-x"></i>
</div>
</div>
<ul class="nav-list">
<li class="nav-item"><a class="nav-link active" href="#home">Home</a></li>
<li class="nav-item"><a href="#products" class="nav-link">Products</a></li>
<li class="nav-item"><a href="#featured" class="nav-link">Featured</a></li>
<li class="nav-item"><a href="#best-sellers" class="nav-link">Best Sellers</a></li>
<li class="nav-item"><a href="#contact" class="nav-link">Contact</a></li>
<li class="nav-item"><a href="#" class="nav-link icon"><i class="bx bx-shopping-bag"></i></a></li>
</ul>
</div>
<main>
<section class="section featured">
<div class="title">
<h1 id="products">Products</h1>
</div>
</section>
<section class="section featured">
<div class="title">
<h1 id="featured">Featured</h1>
</div>
</section>
<section class="section featured">
<div class="title">
<h1 id="best-sellers">Best Sellers</h1>
</div>
</section>
</main>
<footer id="footer" class="section footer">
<div class="footer-title">
<h1 id="contact">Contact</h1>
</div>
</footer>
--JS--
//Change navigation style on scroll
window.addEventListener('scroll', event => {
let scrollLink = document.querySelector('a.nav-link');
(window.scrollY >= 45) ? scrollLink.classList.add('scroll') : scrollLink.classList.remove('scroll');
});
//Active navigation on scroll
window.addEventListener('scroll', event => {
let navLinks = document.querySelectorAll('a');
let fromTop = window.scrollY;
navLinks.forEach(link => {
let section = document.querySelector(link.hash);
if (
section.offsetTop <= fromTop &&
section.offsetTop + section.offsetHeight > fromTop
) {
link.classList.add('active');
} else {
link.classList.remove('active');
}
});
});
--CSS--
a {
color: inherit;
text-decoration: none;
}
a:hover,
a:focus {
color: #fa448c;
text-decoration: underline;
}
a.active {
padding: 8px 15px;
display: block;
text-transform: capitalize;
background-color: #fa448c;
color: #fff;
}
li {
list-style-type: none;
}
--HTML--
商场
产品
作为特色的
畅销书
接触
--JS--
//更改滚动上的导航样式
addEventListener('scroll',event=>{
让scrollLink=document.querySelector('a.nav-link');
(window.scrollY>=45)?scrollLink.classList.add('scroll'):scrollLink.classList.remove('scroll');
});
//滚动式主动导航
window.addEventListener('scroll',event=>{
让navLinks=document.querySelectorAll('a');
让fromTop=window.scrollY;
navLinks.forEach(link=>{
let section=document.querySelector(link.hash);
如果(
节。从顶部偏移
) {
link.classList.add('active');
}否则{
link.classList.remove('active');
}
});
});
--CSS--
a{
颜色:继承;
文字装饰:无;
}
a:悬停,
a:焦点{
颜色:#fa448c;
文字装饰:下划线;
}
a、 活跃的{
填充:8px 15px;
显示:块;
文本转换:大写;
背景色:#fa448c;
颜色:#fff;
}
李{
列表样式类型:无;
}
此代码意味着部分的数量必须与标签的数量a
相对应
我对您的代码进行了一些修改,并注释掉了第一个和最后一个a
标记。看看它是如何工作的。但没有必要就此止步。访问时,必须使用方法querySelectorAll(“.nav list a”)
排除第一个和最后一个标记
let mainNavLinks=document.queryselectoral(“.nav list a”);
addEventListener(“滚动”,事件=>{
让fromTop=window.scrollY;
mainNavLinks.forEach(link=>{
let section=document.querySelector(link.hash);
如果(
节。从顶部偏移
) {
link.classList.add(“活动”);
}否则{
link.classList.remove(“活动”);
}
});
});代码>
菜单{
位置:粘性;
排名:0;
背景色:白色;
}
a{
颜色:继承;
文字装饰:无;
}
a:悬停,
a:焦点{
颜色:#fa448c;
文字装饰:下划线;
}
.主动{
填充:8px 15px;
显示:块;
文本转换:大写;
背景色:#fa448c;
颜色:#fff;
}
李{
列表样式类型:无;
}
#产品{
背景色:红色;
高度:500px;
}
#特色{
背景颜色:绿色;
高度:500px;
}
#畅销书{
背景颜色:黄色;
高度:500px;
}
#接触{
背景颜色:灰色;
高度:500px;
}
--HTML--
商场
“但我必须向你们解释,谴责快乐和赞美痛苦的错误观念是如何产生的,我将给你们一个完整的系统描述,并阐述伟大的真理探索者、人类幸福的建设者的实际教导。没有人拒绝、不喜欢或回避快乐本身,因为快乐本身就是快乐,但我们必须这样做因为那些不知道如何理性地追求快乐的人会遇到极度痛苦的后果。也没有任何人爱、追求或渴望获得痛苦本身,因为这是痛苦,但因为偶尔会发生一些情况,在这些情况下,辛劳和痛苦可以使他获得一些巨大的快乐。举个小例子,除了从中获得一些好处外,我们中谁曾进行过艰苦的体育锻炼?但是,谁有权对一个选择享受没有烦人后果的快乐的人,或者一个选择避免没有结果快乐的痛苦的人挑剔呢?”
“但我必须向你们解释,谴责快乐和赞美痛苦的错误观念是如何产生的,我将给你们一个完整的系统描述,并阐述伟大的真理探索者、人类幸福的建设者的实际教导。没有人拒绝、不喜欢或回避快乐本身,因为快乐本身就是快乐,但我们必须这样做因为那些不知道如何理性地追求快乐的人会遇到极度痛苦的后果。也没有任何人爱、追求或渴望获得痛苦本身,因为这是痛苦,但因为偶尔会发生一些情况,在这些情况下,辛劳和痛苦可以使他获得一些巨大的快乐。举个小例子,除了从中获得一些好处外,我们中谁曾进行过艰苦的体育锻炼?但是,谁有权对一个选择享受没有烦人后果的快乐的人,或者一个选择避免没有结果快乐的痛苦的人挑剔呢?”
“但我必须向你们解释,谴责快乐和赞美痛苦的错误观念是如何产生的,我将给你们一个完整的系统描述,并阐述伟大的真理探索者、人类幸福的建设者的实际教导。没有人拒绝、不喜欢或回避快乐本身,因为快乐本身就是快乐,但我们必须这样做因为那些不知道如何理性地追求快乐的人会遇到极度痛苦的后果。也没有任何人爱、追求或渴望获得痛苦本身,因为这是痛苦,但因为偶尔会发生一些情况,在这些情况下,辛劳和痛苦可以使他获得一些巨大的快乐。举个小例子,wh