我的汉堡式菜单上有一个用 HTML、CSS 和 Vanilla JavaScript 编写的动画。
当您单击汉堡菜单按钮时,应该发生以下事件:
main
旋转 180° 并在 2000ms
上沿高度缩小2000ms
通过后,菜单出现,汉堡包图标变为 X
display: 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>
如果你的意思是退出点击只是恢复原始状态,没有动画,那是因为你已经在
.move-away
类上定义了transition
属性,并且在退出点击时立即将其删除。您应该将此
transition: all 2000ms escape-in-out;
移至main
样式(CSS 文件中的第 14 行)以使动画双向工作