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

如何修改JavaScript代码实现Accordion手风琴同一时间仅展开一个面板

手风琴单开模式实现方案

修改思路

  • 点击手风琴元素时,先遍历所有手风琴节点,排除当前点击的节点,统一移除active类,同时将对应面板的maxHeight设为null关闭其他已展开面板
  • 再单独处理当前点击节点的展开/收起逻辑,保留原有的点击自身可收起的交互

完整修改后代码

JavaScript代码

var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    // 关闭所有其他已展开的面板
    for (var j = 0; j < acc.length; j++) {
      if (acc[j] !== this) {
        acc[j].classList.remove("active");
        acc[j].nextElementSibling.style.maxHeight = null;
      }
    }
    // 处理当前点击面板的状态切换
    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight) {
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    }
  });
}

HTML代码(无需修改)

<div class="accordion"><b>Heading 1</b></div>
<div class="panel">
  <p class="text-light">Text 1</p>
</div>
<div class="accordion"><b>Heading 2</b></div>
<div class="panel">
  <p class="text-light">Text 2</p>
</div>

交互说明

  • 任意时间最多仅1个面板处于展开状态,点击新面板时自动关闭已打开的其他面板
  • 保留点击当前已展开面板的标题可收起该面板的逻辑,符合常规手风琴交互习惯
  • 原有样式完全不需要调整,仅修改JS逻辑即可生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:24:04