gpt4 book ai didi

javascript - 需要点击 2 次才能激活按钮

转载 作者:行者123 更新时间:2023-11-30 11:50:29 25 4
gpt4 key购买 nike

我正在努力学习 Javascript,特别是如何添加 onclick 事件和操作 DOM。

我在 Codepen 上设置了一个真实世界的例子.

将浏览器压低,您会在顶部看到经典的“汉堡包”菜单。这工作正常,除了(刷新页面后)我必须点击汉堡包两次才能激活它。

代码如下:

var hamburger = document.getElementById("burger"),
menu = document.getElementById("myMenu");


hamburger.addEventListener("click",function(e){
if (menu.style.height==="0px"){
menu.style.height="480px";
hamburger.style.transform="rotate(90deg)";
}else{
menu.style.height="0px";
hamburger.style.transform="rotate(0deg)";
}
});
body {
font: 13pt/130% 'Linden Hill', Times, 'Times New Roman', serif;
background: #BEDFFC;
margin: 0;
}

#burger {
display: none;
color: #BEDFFC;
font-size: 2em;
line-height: 1.25em;
position: relative;
transition: all .25s;
height: 1em;
width: 1em;
left:20px;
top:10px;
transform: rotate(45deg);
}

nav {
width: 100%;
margin: 0 auto;
}

nav ul {
list-style: none;
}

nav a {
font: .9em 'Archivo Narrow', "Helvetica Neue", sans-serif;
display: block;
float: left;
text-align:center;
text-decoration: none;
width: 12%;
margin-right: 1%;
color: rgba(122, 166, 216, 0.87);
border: 1px solid rgba(220, 247, 253, 0.55);
border-radius: 0px 10px 0px 0px;
transition: all .5s ease;
}

nav a.current,
nav a:hover {
color: #dbebf7;
text-decoration: none;
background: #539fd9;
}

@media only screen and (max-width: 800px) {
nav {
background: #265980;
width: 100vw;
height: 60px;
transition: all.5s;
}
nav a {
float: none;
border-radius: 0;
background: hsla(209, 78%, 93%,.75);
width:100%;
height: 40px;
font-size: 30px;
}

#myMenu {
width: 75%;
height: 0px;
margin: 18px auto;
padding: 0;
transition: all .25s;
overflow: hidden;
}
#burger {
display: initial;

}
#burger:hover{
color:white;
}
}
  
<nav id="myNav">
<div id="burger">&#9776;</div>
<ul id="myMenu">
<li><a href="#" class="current">menu 1</a></li>
<li><a href="#" >menu 2</a></li>
<li><a href="#">menu 3</a></li>
<li><a href="#" title="interactive">menu 4</a></li>
<li><a href="#">menu 5</a></li>
<li><a href="#">menu 6</a></li>
<li><a href="#">menu 7</a></li>
</ul>
</nav>

现在,如果我删除 addEventListener block 中的条件,并且只更改元素的样式,它就可以正常工作。

var hamburger = document.getElementById("burger"),
menu = document.getElementById("myMenu");

//works, but doesn't toggle, of course...
hamburger.addEventListener("click",function(e){
menu.style.height="480px";

});
body {
font: 13pt/130% 'Linden Hill', Times, 'Times New Roman', serif;
background: #BEDFFC;
margin: 0;
}

#burger {
display: none;
color: #BEDFFC;
font-size: 2em;
line-height: 1.25em;
position: relative;
transition: all .25s;
height: 1em;
width: 1em;
left:20px;
top:10px;
transform: rotate(45deg);
}

nav {
width: 100%;
margin: 0 auto;
}

nav ul {
list-style: none;
}

nav a {
font: .9em 'Archivo Narrow', "Helvetica Neue", sans-serif;
display: block;
float: left;
text-align:center;
text-decoration: none;
width: 12%;
margin-right: 1%;
color: rgba(122, 166, 216, 0.87);
border: 1px solid rgba(220, 247, 253, 0.55);
border-radius: 0px 10px 0px 0px;
transition: all .5s ease;
}

nav a.current,
nav a:hover {
color: #dbebf7;
text-decoration: none;
background: #539fd9;
}

@media only screen and (max-width: 800px) {
nav {
background: #265980;
width: 100vw;
height: 60px;
transition: all.5s;
}
nav a {
float: none;
border-radius: 0;
background: hsla(209, 78%, 93%,.75);
width:100%;
height: 40px;
font-size: 30px;
}

#myMenu {
width: 75%;
height: 0px;
margin: 18px auto;
padding: 0;
transition: all .25s;
overflow: hidden;
}
#burger {
display: initial;

}
#burger:hover{
color:white;
}
}
  
<nav id="myNav">
<div id="burger">&#9776;</div>
<ul id="myMenu">
<li><a href="#" class="current">menu 1</a></li>
<li><a href="#" >menu 2</a></li>
<li><a href="#">menu 3</a></li>
<li><a href="#" title="interactive">menu 4</a></li>
<li><a href="#">menu 5</a></li>
<li><a href="#">menu 6</a></li>
<li><a href="#">menu 7</a></li>
</ul>
</nav>

在这里寻找纯 Javascript、非 jQuery 的答案。

我到底做错了什么?提前致谢。

最佳答案

菜单的初始高度计算为零,但内联样式的高度属性的初始值为空字符串(因为您尚未设置它)。

所以当你测试的时候:

if (menu.style.height==="0px"){

第一次,您点击 else 并将其明确设置为 0px

解决此问题的最简洁方法是测试、添加和删除类名,而不是直接操作内联样式。

关于javascript - 需要点击 2 次才能激活按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39624380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com