gpt4 book ai didi

javascript - CSS 动画类在使用 JS 时闪烁起来

转载 作者:可可西里 更新时间:2023-11-01 15:01:39 26 4
gpt4 key购买 nike

我有一个移动菜单,它会在窗口低于 736 像素时显示。此菜单上有一个 javascript 切换,它添加了 CSS 类来使移动菜单进出动画。

当我重新调整窗口大小时然后打开和关闭移动菜单它工作正常,当窗口随后再次重新调整大小时,下拉移动菜单在窗口点击 CSS 时闪烁一秒钟再次使用媒体查询断点 (736px)。

如果有人能在这方面帮助我,我将不胜感激。

** 注意我需要菜单动画出来所以我不能只删除 mobileMenuActive 类。

代码笔:https://codepen.io/emilychews/pen/POeGaN

JS

var mobileMenuButton = document.getElementById("mobile-menu-button")
var mobileMenuItems = document.getElementById("nav-menu-items")

// TOGGLE MOBILE MENU
var mobileMenu = false

function toggleMobileMenu() {

if (mobileMenu === false) {

mobileMenuItems.classList.remove("mobileMenuInactive")
mobileMenuItems.classList.add("mobileMenuActive")
mobileMenuButton.innerHTML = "Close"
mobileMenu = true

} else {

mobileMenuItems.classList.add("mobileMenuInactive")
mobileMenuItems.classList.remove("mobileMenuActive")
mobileMenuButton.innerHTML = "Menu"
mobileMenu = false

}
}

mobileMenuButton.addEventListener("click", function() {
toggleMobileMenu()
}, false)

CSS

body, ul {padding: 0; margin: 0}

/* --- DESKTOP MENU STYLING ---*/

#main-header {width: 100%; height: 100px;}

#mobile-menu-button {display: none;}

#main-navigation {
position: relative;
width: 100%;
height: 100px;
background: red;
display: flex;
justify-content: space-between;
box-sizing: border-box;
padding: 10px 5% 10px 5%;
align-items: center;
}

ul#nav-menu-items {
display: flex;
margin-left: auto;
}

#main-navigation ul li {list-style-type: none;}

ul#nav-menu-items li a {
padding: 10px 15px;
margin: 0 5px;
box-sizing: border-box;
background: yellow;
text-decoration: none;
color:#000;
}

#main-navigation ul#nav-menu-items li a:hover {
color:blue;
transition: color .25s;
}

/* --- MOBILE MENU AND DROPDOWN ---*/

@media screen and (max-width : 736px) {

#main-navigation {justify-content: flex-end;}

#mobile-menu-button {
display: flex;
justify-content: center;
background: blue;
color: white;
padding: 10px 15px;
min-width: 75px;
cursor: pointer;}

/* dropdown mobile menu */
ul#nav-menu-items {
opacity: 0;
display: flex;
flex-direction: column;
align-items: flex-start;
min-width: 150px;
background: blue;
position: absolute;
right: 5%;
top: 100px;
padding: 10px 0px;
}

ul#nav-menu-items li {
padding: 10px 10px;
}

ul#nav-menu-items li a {
padding: 10px 15px;
color: white;
background: transparent;
}

ul#nav-menu-items li a:hover {
color: lightblue;
}

/* -------- MOBILE CLASSES ADDED WITH JavaScript*/

#nav-menu-items.mobileMenuActive {
animation: showMobileMenu .5s ease-in forwards;
}

@keyframes showMobileMenu {
0% {opacity: 0;}
100% {opacity: 1;}
}

#nav-menu-items.mobileMenuInactive {
animation: removeMobileMenu .5s ease-out forwards;
}

@keyframes removeMobileMenu {
0% {opacity: 1;}
100% {opacity: 0;}
}

} /*END OF MOBILE MENU STYLING*/

HTML

<header id="main-header">
<nav id="main-navigation">
<ul id="nav-menu-items">
<li class="menu-item menu-item-1"><a href="https://www.google.com">News</a></li>
<li class="menu-item menu-item-2"><a href="https://www.google.com">About</a></li>
<li class="menu-item menu-item-3"><a href="https://www.google.com">Contact</a></li>
</ul>

<!-- button for triggering mobile nav -->
<div id="mobile-menu-button">Menu</div>

</nav>
</header>

最佳答案

一个选项是使用窗口 resize事件并删除 mobileMenuInactive 类。然后当您单击“菜单”时,您的代码会再次添加它。

window.addEventListener('resize', function(){
mobileMenuItems.classList.remove("mobileMenuInactive");
});

关于javascript - CSS 动画类在使用 JS 时闪烁起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47440607/

26 4 0
文章推荐: hadoop -libjars 和 ClassNotFoundException
文章推荐: javascript - 如何从浏览器历史记录中完全隐藏网站?
文章推荐: hadoop - 我们可以在同一个 hadoop 集群中同时使用 Fair scheduler 和 Capacity Scheduler
文章推荐: java - 将 Iterable 中的所有记录插入 java 中的列表