I have an animation on my hamburger menu written in HTML, CSS and Vanilla JavaScript.
When you click the hamburger menu button, the following events should occur:
main Rotate 180° and zoom out along the height at 2000ms2000ms passes, the menu appears and the hamburger icon changes to Xdisplay: none;The main problem is the inability to exit the button due to settimeout on lines 12-14.
Here is the code snippet for better understanding.
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>
If you mean that the exit click just returns to the original state without animation, that's because you have defined the
transitionattribute on the.move-awayclass, and on exit Delete it immediately when clicked.You should move this
transition: all 2000ms escape-in-out;to themainstyle (line 14 in the CSS file) to make the animation work in both directions