javascript - 由 Javascript 添加时,CSS 动画不起作用
问题描述
我正在尝试制作一个汉堡图标按钮。当您单击它时,顶线和底线应该向左移动,中间的线应该消失,但是当我单击它时,什么也没有发生。我已经在浏览器中打开了 JavaScript,但是没有用。我以为是代码编辑器,所以我下载了 atom(我通常使用 VS 代码),但这也不起作用。
const menuBtn = document.querySelector('.menu-btn');
let menuOpen = false;
menuBtn.addEventListener('click', () => {
if(!menuOpen){
menuBtn.classList.add('open');
menuOpen = true;
} else {
menuBtn.classList.remove('open');
menuOpen = false;
}
});
* {
margin: 0;
padding: 0;
box-sizing: border-box
}
body {
background: #272727;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.menu-btn {
position: relative;
display: flex;
justify-content: center;
align-items: center;
width: 80px;
height: 80px;
cursor: pointer;
transition: all .5s ease-in-out;
border: 3px solid #fff
}
.menu-btn__burger {
width: 50px;
height: 6px;
background: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px rgb(255, 101, 47, .2);
transition: all .5s ease-in-out;
}
.menu-btn__burger::before,
.menu-btn__burger::after {
content: '';
position: absolute;
width: 50px;
height: 6px;
background: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(255,201,47,.2);
transition: all .5s ease-in-out;
}
.menu-btn__burger::before {
transform: translateY(-16px);
}
.menu-btn__burger::after {
transform: translateY(16px);
}
/* ANIMATION */
.menu-btn.open .menu-btn__burger {
transform: translateX( -50px);
background: transparent;
box-shadow: none;
}
<body>
<div class="menu-btn">
<div class="menu-btn__burger"></div>
</div>
</body>
解决方案
你的代码已经很好了。它运作良好。也许您忘记刷新窗口 :)
另外,如果您还不知道,您可以使用elem.classList.toggle("class")
代替if-else
条件。
const menuBtn = document.querySelector('.menu-btn');
let menuOpen = false;
menuBtn.addEventListener('click', () => {
menuBtn.classList.toggle("open");
menuOpen = !menuOpen;
});
* {
margin: 0;
padding: 0;
box-sizing: border-box
}
body {
background: #272727;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.menu-btn {
position: relative;
display: flex;
justify-content: center;
align-items: center;
width: 80px;
height: 80px;
cursor: pointer;
transition: all .5s ease-in-out;
border: 3px solid #fff
}
.menu-btn__burger {
width: 50px;
height: 6px;
background: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px rgb(255, 101, 47, .2);
transition: all .5s ease-in-out;
}
.menu-btn__burger::before,
.menu-btn__burger::after {
content: '';
position: absolute;
width: 50px;
height: 6px;
background: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(255,201,47,.2);
transition: all .5s ease-in-out;
}
.menu-btn__burger::before {
transform: translateY(-16px);
}
.menu-btn__burger::after {
transform: translateY(16px);
}
/* ANIMATION */
.menu-btn.open .menu-btn__burger {
transform: translateX( -50px);
background: transparent;
box-shadow: none;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS hamburger Animation</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="menu-btn">
<div class="menu-btn__burger"></div>
</div>
<script src="main.js"></script>
</body>
</html>
推荐阅读
- postman - Postman 的 pm.test() 函数的规范是什么?
- sql - 使用 django 从谷歌 VM 连接到谷歌云 SQL
- javascript - 对于给定的字符串数组,每个字符串都有一个项目名称,按项目名称对所有字符串进行分组
- node.js - AWS codebuild 在构建期间从 Node 包中删除开发依赖项
- reactjs - 除非手动重新加载页面,否则嵌入式 Facebook 不会使用 Gatsby 显示
- visual-studio - Visual Studio 2019 和 VS 2017 无法发现测试
- coding-style - 编写代码 Javascript 和其他语言
- networking - TCP 中 SEQ 和 ACK 不匹配
- java - 单击移动图像位置时的 GridView
- python - 从命令行运行时,在pycharm中运行的python脚本有内存分配错误