尝试使用带有切换功能的 javascript 来打开导航栏/汉堡菜单,但显示 null 属性错误
我有一个 2 天后要交的作业,需要使用 javascript,我正尝试让这个导航栏在移动视图上变成汉堡菜单,并使用 js 来工作(需要响应)。我找到了这个简单的代码,它一直工作到最后两行...
const burgerMenu = document.querySelector(".burger_menu");
const navLinks = document.querySelector(".nav-links");
burgerMenu.addEventListener("click", () => {
navLinks.classList.toggle(".mobile-menu");
});
当我打开 Inspect => Console 时,它​​显示:“未捕获的 TypeError:无法读取 null 的属性(读取 'addEventListener') at nav.js:11:12”
这适用于这个法国人的视频,但我想知道是不是代码错了?我没看到拼写错误?
有什么建议吗?任何帮助都将不胜感激! 🙏
//视频来自: https://www.youtube.com/watch?v=HQopEEurQYE&ab_channel=LiveCode
[HTML]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="css/generel.css" />
<link rel="stylesheet" href="css/layout.css" />
<title>Grid Example 01</title>
</head>
<body>
<header>
<nav class="navbar">
<a class="logo" href="index.html">Amalia</a>
<div class="nav-links">
<ul>
<li><a class="active" href="#">FORSIDE</a></li>
<li><a href="#">OPGAVER</a></li>
<li><a href="#">OM MIG</a></li>
</ul>
</div>
<img
class="burger-menu"
src="./icons/burger_btn.png"
alt="burger menu"
/>
</nav>
</header>
<main class="grid_1-1">
<section>
<h1>Om Mig</h1>
<hr />
<p>
Mit navn er blaaaaah, og jeg i gang med min nuværende
uddannelse på blaaah, som multimedie- og design student!
</p>
<p>
Uddannelsen fandt min interesse, da jeg altid har været på den
kreative side, og jeg vil generelt gerne udforske og lære mulighederne
inden for frontend og web design, hvilket Multimedie- og design
uddannelsen bringer.
</p>
<p>
Min tidligere uddannelse på blaaaah mediefagslinje på
engelsk, har erfaret mig med med programmer såsom: Photoshop, Premier
Pro, Final Cut Pro - men også banet vej for mit freelance arbejde som
fotograf.
</p>
<p>
Således, tror jeg også mine generelle interesser og kompetencer inden
for kunst, fotografi, filmproduktion og videoredigering - har bragt
mig på disse baner.
</p>
<p>Så alt i alt, har den kreative industri har altid lokket mig!</p>
<div class="box-btn-i">
<ul>
<li>
<a
class="btn"
href="./data/info.txt"
download="CV_Amalia"
>CV</a
>
</li>
<li><a class="btn" href="about.html">PROJEKTER</a></li>
</ul>
</div>
</section>
<img src="/img_ama/mig_amalia.jpg" alt="amalia" />
</main>
<footer>
<p>©Amalia 2023</p>
<ul>
<li>
<a href="#">LinkedIn</a>
</li>
<li>
<a href="#">Instagram</a>
</li>
</ul>
</footer>
</body>
<script src="nav.js"></script>
</html>
[此 CSS]
body {
margin: 0;
/* De næste tre linjer er for at lave en "sticky footer" */
min-height: 100vh;
display: grid;
grid-template-rows: auto 1fr auto;
}
main {
padding: 1em;
}
img {
max-width: 100%;
}
nav > ul {
list-style: none;
/* De næste fire linjer placerer menuen i center */
display: grid;
grid-template-columns: repeat(3, 1fr);
justify-items: center;
padding: 0;
}
@media (min-width: 800px) {
.grid_1-1 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1em;
max-width: 1200px;
justify-self: center;
}
}
.navbar .burger-menu {
display: none;
position: absolute;
width: 35px;
top: 50px;
right: 50px;
}
@media screen and (max-width: 900px) {
.navbar {
padding: 0;
}
.navbar .logo {
position: absolute;
top: 50px;
left: 50px;
}
.nav-links {
/* display: none; */
top: 0;
left: 0;
position: absolute;
background-color: rgba(146, 189, 202, 0.252);
backdrop-filter: blur(7px);
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
margin-left: -100%;
transition: all 0.8s ease;
}
.nav-links ul {
display: flex;
flex-direction: column;
align-items: center;
}
.navbar .nav-links ul li {
margin: 25px;
font-size: 2em;
}
.navbar .burger-menu {
display: block;
}
}
我尝试过其他解决方案,但似乎都没有用。只需要一个简单的 js 代码,没有什么复杂的,因为我是初学者,所以我也非常怀疑我对这个问题的了解。 (我们不允许使用框架,但这是必需的,他们还没有教我们如何实现汉堡菜单/它被忽略了......)。
感谢所有人尝试并阅读此文。
您收到错误,因为 burgermenu 未定义。这是因为您像这样声明了它
document.querySelector(".burger_menu");
,其中用了下划线而不是 - 符号。
基本上
querySelector
找不到具有该类的元素,因为
"burger_menu" != "burger-menu"
。正确的代码应该是:
document.querySelector(".burger-menu");
脚本中似乎有一个拼写错误,
burger-menu
应该代替
burger_menu
。请注意下划线与破折号。类名必须完全匹配。
HTML 代码在
img
标签上定义了
class="burger-menu"
,而脚本通过
document.querySelector(".burger_menu")
查询不存在的类。
可能的修复方法是简单地使用
document.querySelector(".burger-menu")
。