簡體   English   中英

Vanilla JS setTimeout() 的破壞行為

[英]Broken Behavior with Vanilla JS setTimeout()

我的漢堡式菜單上有一個 animation,上面寫着 HTML、CSS 和 Vanilla JavaScript。

預期結果

當您單擊漢堡菜單按鈕時,應該發生以下事件:

單擊漢堡菜單圖標時:

  1. main旋轉 180° 並在2000ms高度收縮
  2. 2000 2000ms過去后,菜單出現並且漢堡包圖標變為X

單擊退出按鈕時:

  1. 將頁面再旋轉 180° 覆蓋菜單
  2. 隱藏菜單: display: none;
  3. 將退出按鈕轉換回漢堡包圖標

實際發生了什么

主要問題是退出按鈕不是因為第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>

如果隨機你的意思是退出點擊只是恢復原來的 state 而沒有 animation,那是因為你已經在.move-away class 上定義了transition屬性,並且它在退出點擊時立即被刪除。

你應該移動這個transition: all 2000ms ease-in-out; 進入main樣式(CSS 文件中的第 14 行)以使 animation 雙向工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM