javascript - 如何更正我的代码以使“onclick”切换器组件仅适用于图标?
问题描述
我有一个用 javascript 制作的可折叠组件。我希望它能够工作,以便当您单击图标时菜单会下拉/折叠。它当前的工作方式是,如果您单击整行上的任意位置,则适用此规则。
const collapsibles = document.querySelectorAll(".collapsible");
collapsibles.forEach((item) =>
item.addEventListener("click", function() {
this.classList.toggle("collapsible--expanded");
})
);
.collapsible__header {
display: flex;
justify-content: space-between;
}
.collapsible__heading {
margin-top: 0;
}
.collapsible__chevron {
transform: rotate(-90deg);
transition: transform 0.3s;
}
.collapsible__content {
max-height: 0;
overflow: hidden;
opacity: 0;
transition: all 0.5s;
}
.collapsible--expanded .collapsible__chevron {
transform: rotate(0);
}
.collapsible--expanded .collapsible__content {
max-height: 100vh;
opacity: 1;
}
.collapsible .icon {
height: 50px;
width: 50px;
}
<div class="collapsible">
<header class="collapsible__header">
<h2 class="collapsible__heading">Item 1</h2>
<svg class="icon icon--white collapsible__chevron">
<use xlink:href="images/integratesprite.svg#chevron"></use>
</svg>
</header>
<div class="collapsible__content">
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Corrupti, adipisci.
</div>
</div>
解决方案
因为 SVG 是不可见的,所以我不得不添加一个带有 SVG 类的跨度。
如果删除跨度,代码应该在 svg 上工作
document.querySelector(".collapsible__chevron").addEventListener("click", function(e) {
this.closest(".collapsible").classList.toggle("collapsible--expanded");
})
.collapsible__header {
display: flex;
justify-content: space-between;
}
.collapsible__heading {
margin-top: 0;
}
.collapsible__chevron {
transform: rotate(-90deg);
transition: transform 0.3s;
}
.collapsible__content {
max-height: 0;
overflow: hidden;
opacity: 0;
transition: all 0.5s;
}
.collapsible--expanded .collapsible__chevron {
transform: rotate(0);
}
.collapsible--expanded .collapsible__content {
max-height: 100vh;
opacity: 1;
}
.collapsible .icon {
height: 50px;
width: 50px;
}
<div class="collapsible">
<header class="collapsible__header">
<h2 class="collapsible__heading">Item 1</h2><span class="icon icon--white collapsible__chevron">▼</span>
</header>
<div class="collapsible__content">
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Corrupti, adipisci.
</div>
</div>
推荐阅读
- json - 编组后删除转义字符
- debugging - Extendscript Toolkit 调试器失败:无法启动调试会话
- ios - 如何在不使用 WebView 和 NSAttributString 的情况下呈现 HTML 字符串,就像在 Gmail 线程中一样。(iOS+Swift)
- php - Drush cim 命令在 Windows 机器上导致 PHP 致命错误
- excel - 过滤后,如何选择和删除Excel中的可见行?
- python - 如何按升序(按中值)对箱线图值进行排序?
- java - 口袋妖怪敌人随机发生器
- karate - 我们可以一次性在 karate-config.js 文件中设置的所有环境中运行空手道脚本吗
- spring - Thymeleaf 显示元素在使用布局时处于活动状态
- php - 正则表达式只返回某些值 PHP