javascript - 箭头翻转功能半工作,几乎完整的 JS
问题描述
我创建了一个函数,允许用户单击下拉“隐藏”div/子菜单的可见 div。在可见 div 的右侧有一个箭头图像。总共有 5 个可见的 div 和 5 个箭头。当“隐藏”的 div 打开时,我需要让箭头旋转 180 度,并在关闭时旋转回 0 度。编写当前代码后,我可以选择要旋转的第一个箭头图像。如果我要单击第二个 div,我希望第二个箭头旋转,第一个箭头正在获取脚本。我相信会使用 querySelectorAll,但控制台不会选择它。任何提示总是非常感谢!
//
const questionBox = document.getElementsByClassName("question__container");
const arrows = document.querySelector(".question__container--img");
[...questionBox].forEach((el) =>
el.addEventListener("click", (event) => {
const subMenu = event.target.parentElement.parentElement.querySelector(
".options__container"
);
subMenu.classList.toggle("open");
if (subMenu.classList.contains("open")) {
arrows.style.transform = "rotate(180deg)";
} else {
arrows.style.transform = "rotate(0deg)";
}
})
);
//
解决方案
基于您当前的逻辑,这就是您可以做的。
- 获取所有箭头
querySelectorAll
- 创建一个
collapseAllArrows
基本上遍历所有箭头并折叠它们的函数。 - 当单击任何 div 元素并
subMenu
切换该元素的 时,open
然后调用该collapseAllArrows
函数以折叠所有展开的箭头。 - 找到单击的 div 元素的箭头并将其展开。
你的代码应该是这样的
const questionBox = document.getElementsByClassName("question__container");
const arrows = document.querySelectorAll(".question__container--img");
const collapseAllArrows = () => {
arrows.forEach(arrow => arrow.style.transform = "rotate(0deg)";)
}
[...questionBox].forEach((el) =>
el.addEventListener("click", (event) => {
const subMenu = event.target.parentElement.parentElement.querySelector(
".options__container"
);
subMenu.classList.toggle("open");
if (subMenu.classList.contains("open")) {
collapseAllArrows();
const currentArrow = el.querySelector(".question__container--img");
currentArrow.style.transform = "rotate(180deg)";
}
})
);
推荐阅读
- php - Laravel 中的 RTL(从右到左)和波斯语支持
- arkit - 为什么我应该在 ARKit 的渲染器(_:nodeFor:) 中将节点添加到超节点
- ios - 3531 架构 arm64 的重复符号
- javascript - 在 React 中使用 Axios 下载图像?
- python - 密码保护python中的文件
- docker - 如何在docker compose中定义环境值:in name?
- java - 如何将 tribonacci 系列值传入数组然后打印我想要的任何索引值?
- android - 如何去除 ActionBar 中图标的阴影?
- javascript - Viima JQuery 评论 - GetUsers(Pinged 用户)在部分视图中显示不正确
- javascript - 如何将 src 设置为 javascript 中的每个洗牌图像?