我的汉堡式菜单上有一个用 HTML、CSS 和 Vanilla JavaScript 编写的动画。
当您单击汉堡菜单按钮时,应该发生以下事件:
main 旋转 180° 并在 2000ms 上沿高度缩小2000ms 通过后,菜单出现,汉堡包图标变为 Xdisplay: none;主要问题是由于第 12-14 行的 settimeout 而无法退出按钮。
这是为了更好地理解的代码片段。
var exitButton = document.getElementById("exit-button");
var exitButtonOnClick = function() {
mobileMenu.classList.add("hidden");
}
var mobileMenuButton = document.getElementById("mobile-menu-enter");
var mobileMenu = document.getElementById("mobile-menu-id");
var mainContent = document.getElementById("main-content")
var mobileMenuButtonOnClick = function() {
mainContent.classList.toggle("moved-away")
setTimeout(function() {
mobileMenu.classList.toggle("hidden");
}, 2000);
if (mobileMenu.classList.contains("hidden")) {
mobileMenuButton.innerHTML = "<div class='line'></div><br><div class='line'></div><br><div class='line'></div>";
}
};
mobileMenuButton.addEventListener("click", mobileMenuButtonOnClick);
* {
margin: 0;
box-sizing: border-box
}
body {
overflow-x: hidden;
font-size: large;
margin: 0;
}
main {
z-index: 99;
}
.mr-0 {
margin-right: 0;
}
.ml-auto {
margin-left: auto;
}
.d-block {
display: block;
}
.nav-bar {
z-index: 99;
background-color: rgba(204, 204, 204, 0.9);
padding: 10px;
position: sticky;
top: 0;
height: 110px !important;
}
.nav-img {
height: 150px;
position: relative;
bottom: 30px;
}
.nav-options {
float: right;
padding-right: 50px;
position: relative;
top: 15px;
}
.hidden {
display: none !important;
opacity: 0;
transition: all 3000ms ease-in-out;
}
.line {
width: 50px;
background-color: white;
z-index: 99;
height: 0.5px;
}
.moved-away {
transform: rotate(180deg);
height: 0 !important;
transition: all 2000ms ease-in-out;
}
.mobile-nav {
position: sticky;
top: 0;
}
.hamburger-menu {
background-color: transparent;
border: none;
position: relative;
left: 50px;
z-index: 99;
top: 10px;
}
.mobile-menu {
display: flex;
justify-content: center;
padding-right: 40px !important;
min-height: fit-content !important;
line-height: 20vh;
background-image: url("/resources/img_5.jpg");
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
width: 100%;
height: 84vh;
position: absolute;
top: 95px;
right: 0;
}
.mobile-menu li {
width: 100%;
display: inline-block;
}
.mobile-options {
position: relative;
top: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.mobile-option {
width: 90vw;
height: 30px;
font-family: 'Montserrat' sans-serif;
display: inline-block;
background-color: rgba(204, 204, 204, 0.8);
color: black;
border: none;
border-radius: 15px;
font-size: large;
text-align: center;
}
.exit-btn {
min-width: 50px;
background-color: transparent;
border: none;
font-size: 4rem;
color: white;
font-family: 'Montserrat', sans-serif;
font-weight: lighter;
position: relative !important;
bottom: 20px !important;
z-index: 999999 !important;
}
<div class="nav-bar">
<nav class="mobile-nav">
<a href="index.html"><img src="/resources/Copy of The Coders Club.png" class="nav-img"></a>
<div class="nav-options">
<button class="d-block mr-0 ml-auto hamburger-menu" id="mobile-menu-enter">
<div class="line"></div><br>
<div class="line"></div><br>
<div class="line"></div>
</button>
</div>
</nav>
<div class="mobile-menu hidden" id="mobile-menu-id">
<ul class="mobile-options">
<a href="/about.html">
<li><button class="mobile-option">About</button></li>
</a>
<a href="/classes.html">
<li><button class="mobile-option" style="margin-top: 15%; margin-bottom: 15%;">Classes</button></li>
</a>
<a href="/contact.html">
<li><button class="mobile-option">Contact</button></li>
</a>
</ul>
</div>
</div>
<main id="main-content">
Some content. Lorem ipsum... Hello, World!
</main>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
如果你的意思是退出点击只是恢复原始状态,没有动画,那是因为你已经在
.move-away类上定义了transition属性,并且在退出点击时立即将其删除。您应该将此
transition: all 2000ms escape-in-out;移至main样式(CSS 文件中的第 14 行)以使动画双向工作