You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vanilla JS Accordion如何实现点击时仅单个项保持展开

原生JS手风琴实现单一项展开的修改方案

原有代码的逻辑只针对当前点击的手风琴项做激活状态切换,没有处理其他已经处于展开状态的项,所以会出现多个区块同时展开的情况。要实现同一时间仅一个项展开,只需要在切换当前项状态前,先把所有项的激活状态清空即可。

修改后的完整代码

const accordionItems = document.querySelectorAll('.accordion__item');

accordionItems.forEach(item => {
  item.addEventListener('click', function() {
    // 提前记录当前点击项在点击前的激活状态,避免后续清空状态后无法判断
    const isActiveBeforeClick = this.classList.contains('is-active');

    // 遍历所有手风琴项,统一移除激活类,全部收起
    accordionItems.forEach(i => i.classList.remove('is-active'));

    // 如果点击前当前项是未激活状态,就给当前项加上激活类展开
    // 如果点击前已经是激活状态,清空后就保持收起,实现点击已展开项可手动收起的交互
    if (!isActiveBeforeClick) {
      this.classList.add('is-active');
    }
  });
});

逻辑说明

  • 不需要修改原有HTML结构和CSS样式,完全兼容之前用is-active类控制展开/收起的逻辑
  • 额外兼容了点击已展开项自动收起的常用交互,不会出现点击当前展开区块无法收起的问题
  • 所有状态操作都基于原生classList API,没有额外性能开销

内容的提问来源于stack exchange,提问作者tone4407

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:36:27