我做了一个汉堡包菜单按钮,但它只切换第一个元素
I made a hamburger menu button but it only toggles the first element
所以我制作了我的小汉堡包图标,我制作了切换 JS 函数,但它似乎只切换列表的第一个元素。这是我的 HTML header 和汉堡菜单的按钮:
<button onclick='hideBlock()' class="hamburger">
<span>—</span>
<span>—</span>
<span>—</span>
</button>
<header>
<nav>
<div class="row">
<!-- <img src="resurse/img/logo.png" alt="logo-alb" class="logo"> -->
<ul class="main-nav">
<li class="e-nav"><a href="#descriere">Descriere magazin</a></li>
<li class="e-nav"><a href="#functioneaza">Cum functioneaza ?</a></li>
<li class="e-nav"><a href="#adresa">Adresa</a></li>
<li class="e-nav"><a href="#recenzii">Recenzii</a></li>
<li class="e-nav"><a href="#promotii">Promotii</a></li>
<li class="e-nav"><a href="#contact">Contact</a></li>
</ul>
</div>
</nav>
<div class="hero-text-box">
<h1>Cel mai bun magazin. <br> Cele mai bune preturi.</h1>
<a href="#adresa" class="btn btn-full">Vreau sa cumpar</a>
<a href="#promotii" class="btn btn-ghost">Arata-mi mai mult</a>
</div>
</header>
这是我试过的JS函数:
function hideBlock() {
x = document.querySelector('.main-nav .e-nav');
if (x.style.display === 'none') {
x.style.display = 'block'
} else {
x.style.display = 'none'
}
}
此外,这是 CSS 用于我试图在其中实现的查询:
.main-nav .e-nav{
display: none;
text-align: center;
margin-top: 20px;
font-size: 120%;
}
我不太确定解决方案是什么,任何形式的帮助都会非常感谢
而不是对每个列表项 display:none 隐藏孔列表 (ul) itself.And 然后使用 js 切换它。
.main-nav {
display: none;
}
.main-nav .e-nav {
list-style-type: none;
text-align: center;
margin-top: 20px;
font-size: 120%;
}
<button onclick='hideBlock()' class="hamburger">
<span>—</span>
<span>—</span>
<span>—</span>
</button>
<header>
<nav>
<div class="row">
<!-- <img src="resurse/img/logo.png" alt="logo-alb" class="logo"> -->
<ul class="main-nav">
<li class="e-nav"><a href="#descriere">Descriere magazin</a></li>
<li class="e-nav"><a href="#functioneaza">Cum functioneaza ?</a></li>
<li class="e-nav"><a href="#adresa">Adresa</a></li>
<li class="e-nav"><a href="#recenzii">Recenzii</a></li>
<li class="e-nav"><a href="#promotii">Promotii</a></li>
<li class="e-nav"><a href="#contact">Contact</a></li>
</ul>
</div>
</nav>
<div class="hero-text-box">
<h1>Cel mai bun magazin. <br> Cele mai bune preturi.</h1>
<a href="#adresa" class="btn btn-full">Vreau sa cumpar</a>
<a href="#promotii" class="btn btn-ghost">Arata-mi mai mult</a>
</div>
</header>
function hideBlock(){
x = document.querySelector('.main-nav');
if (x.style.display === 'none') {
x.style.display = 'block';
} else {
x.style.display = 'none';
}
}
后来我实际上找到了解决这个问题的方法。我尝试根据评论 document.querySelectorAll(".main-nav li")
中某人的建议更改我的代码,但这在我的控制台中引发了一个错误,其中显示 Cannot read property 'display' of undefined
。那是因为querySelectorAll returns 一个nodeList。因此,为了解决这个问题,我必须遍历每个节点,因为我希望所有项目都在按下按钮时显示和隐藏。所以我循环我的代码如下:
function hideBlock() {
var x = document.querySelectorAll('.main-nav li');
for (var i = 0; i < x.length; i++) {
if (x[i].style.display === 'none') {
x[i].style.display = 'block'
} else {
x[i].style.display = 'none'
}
}
}
感谢所有帮助过我的人,希望你们今天过得愉快:)
所以我制作了我的小汉堡包图标,我制作了切换 JS 函数,但它似乎只切换列表的第一个元素。这是我的 HTML header 和汉堡菜单的按钮:
<button onclick='hideBlock()' class="hamburger">
<span>—</span>
<span>—</span>
<span>—</span>
</button>
<header>
<nav>
<div class="row">
<!-- <img src="resurse/img/logo.png" alt="logo-alb" class="logo"> -->
<ul class="main-nav">
<li class="e-nav"><a href="#descriere">Descriere magazin</a></li>
<li class="e-nav"><a href="#functioneaza">Cum functioneaza ?</a></li>
<li class="e-nav"><a href="#adresa">Adresa</a></li>
<li class="e-nav"><a href="#recenzii">Recenzii</a></li>
<li class="e-nav"><a href="#promotii">Promotii</a></li>
<li class="e-nav"><a href="#contact">Contact</a></li>
</ul>
</div>
</nav>
<div class="hero-text-box">
<h1>Cel mai bun magazin. <br> Cele mai bune preturi.</h1>
<a href="#adresa" class="btn btn-full">Vreau sa cumpar</a>
<a href="#promotii" class="btn btn-ghost">Arata-mi mai mult</a>
</div>
</header>
这是我试过的JS函数:
function hideBlock() {
x = document.querySelector('.main-nav .e-nav');
if (x.style.display === 'none') {
x.style.display = 'block'
} else {
x.style.display = 'none'
}
}
此外,这是 CSS 用于我试图在其中实现的查询:
.main-nav .e-nav{
display: none;
text-align: center;
margin-top: 20px;
font-size: 120%;
}
我不太确定解决方案是什么,任何形式的帮助都会非常感谢
而不是对每个列表项 display:none 隐藏孔列表 (ul) itself.And 然后使用 js 切换它。
.main-nav {
display: none;
}
.main-nav .e-nav {
list-style-type: none;
text-align: center;
margin-top: 20px;
font-size: 120%;
}
<button onclick='hideBlock()' class="hamburger">
<span>—</span>
<span>—</span>
<span>—</span>
</button>
<header>
<nav>
<div class="row">
<!-- <img src="resurse/img/logo.png" alt="logo-alb" class="logo"> -->
<ul class="main-nav">
<li class="e-nav"><a href="#descriere">Descriere magazin</a></li>
<li class="e-nav"><a href="#functioneaza">Cum functioneaza ?</a></li>
<li class="e-nav"><a href="#adresa">Adresa</a></li>
<li class="e-nav"><a href="#recenzii">Recenzii</a></li>
<li class="e-nav"><a href="#promotii">Promotii</a></li>
<li class="e-nav"><a href="#contact">Contact</a></li>
</ul>
</div>
</nav>
<div class="hero-text-box">
<h1>Cel mai bun magazin. <br> Cele mai bune preturi.</h1>
<a href="#adresa" class="btn btn-full">Vreau sa cumpar</a>
<a href="#promotii" class="btn btn-ghost">Arata-mi mai mult</a>
</div>
</header>
function hideBlock(){
x = document.querySelector('.main-nav');
if (x.style.display === 'none') {
x.style.display = 'block';
} else {
x.style.display = 'none';
}
}
后来我实际上找到了解决这个问题的方法。我尝试根据评论 document.querySelectorAll(".main-nav li")
中某人的建议更改我的代码,但这在我的控制台中引发了一个错误,其中显示 Cannot read property 'display' of undefined
。那是因为querySelectorAll returns 一个nodeList。因此,为了解决这个问题,我必须遍历每个节点,因为我希望所有项目都在按下按钮时显示和隐藏。所以我循环我的代码如下:
function hideBlock() {
var x = document.querySelectorAll('.main-nav li');
for (var i = 0; i < x.length; i++) {
if (x[i].style.display === 'none') {
x[i].style.display = 'block'
} else {
x[i].style.display = 'none'
}
}
}
感谢所有帮助过我的人,希望你们今天过得愉快:)