javascript - Onclick 使用 Javascript 将图标旋转 180 度
问题描述
我需要选择所有三个图标,并能够在用户点击它们时让它们旋转 180 度。使用当前编写的代码,它只针对第一个箭头图标,允许它转动 180 度并返回。然而,当我单击其他两个图标时,它们不会旋转/即使我没有单击第一个图标,第一个图标也会旋转。
const arrowFlip = () => {
let div = document.getElementById("nav__links");
let icon = document.getElementById("icon");
let open = false;
div.addEventListener("click", function() {
if (open) {
icon.className = "menu-arrow-down";
} else {
icon.className = "menu-arrow-down open";
}
open = !open;
});
};
arrowFlip();
.menu-arrow-down {
transform: rotate(0deg);
transition: 1s linear;
}
.menu-arrow-down.open {
transform: rotate(180deg);
transition: 1s linear;
}
<ul id="nav__links" class="nav__links">
<div class="desktop__nav">
<li class="parent">
<a href="#">Product</a>
<img id="icon" class="menu-arrow menu-arrow-down" src="./images/icon-arrow-light.svg" alt="arrow" />
<ul class="sub-menu">
<li>Overview</li>
<li>Pricing</li>
<li>Marketplace</li>
<li>Features</li>
<li>Integrations</li>
</ul>
</li>
<li class="parent">
<a href="#">Company</a>
<img id="icon" class="menu-arrow menu-arrow-down" src="./images/icon-arrow-light.svg" alt="arrow" />
<ul class="sub-menu">
<li>About</li>
<li>Team</li>
<li>Blog</li>
<li>Careers</li>
</ul>
</li>
<li class="parent">
<a href="#">Connect</a>
<img id="icon" class="menu-arrow menu-arrow-down" src="./images/icon-arrow-light.svg" alt="arrow" />
<ul class="sub-menu">
<li>Contact</li>
<li>Newsletter</li>
<li>LinkedIn</li>
</ul>
</li>
</div>
解决方案
ID 必须是唯一的。
委托点击 - 它更简单
document.getElementById("nav__links").addEventListener("click", function(e) {
const tgt = e.target;
if (tgt.classList.contains('menu-arrow-down')) { // make sure we only target elements with this class
tgt.classList.toggle('open');
// here you can test tgt.classList.contains('open') to see the state
}
});
.menu-arrow-down {
transform: rotate(0deg);
transition: 1s linear;
}
.menu-arrow-down.open {
transform: rotate(180deg);
transition: 1s linear;
}
<ul id="nav__links" class="nav__links">
<div class="desktop__nav">
<li class="parent">
<a href="#">Product</a>
<img class="menu-arrow menu-arrow-down" src="./images/icon-arrow-light.svg" alt="arrow" />
<ul class="sub-menu">
<li>Overview</li>
<li>Pricing</li>
<li>Marketplace</li>
<li>Features</li>
<li>Integrations</li>
</ul>
</li>
<li class="parent">
<a href="#">Company</a>
<img class="menu-arrow menu-arrow-down" src="./images/icon-arrow-light.svg" alt="arrow" />
<ul class="sub-menu">
<li>About</li>
<li>Team</li>
<li>Blog</li>
<li>Careers</li>
</ul>
</li>
<li class="parent">
<a href="#">Connect</a>
<img class="menu-arrow menu-arrow-down" src="./images/icon-arrow-light.svg" alt="arrow" />
<ul class="sub-menu">
<li>Contact</li>
<li>Newsletter</li>
<li>LinkedIn</li>
</ul>
</li>
</div>
推荐阅读
- django - Django:显示对象属性的预览 - 基于类的视图
- c# - c#中如何在调用方法之外使用ref变量
- git - 在我 rebase 然后同步之后,历史记录在 PR 中翻倍并显示不相关的更改
- eclipse-hono - Eclipse Hono - 在终端中启动命令行客户端以发送命令时出现 ConnectTimeoutException
- html - Angular 材质 - 菜单 A 的菜单点击事件也被用于菜单 B
- python - 从python中的其他文件导入函数
- kubernetes - 是否有可能找出哪个用户上传了 kubernetes 机密?
- javascript - 不检查获取请求是否失败是一种不好的做法吗?
- javascript - React 中的香草 CSS?
- reactjs - 此 ReactJs 示例中如何使用此变量