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

addEventListener点击事件首次需双击切换Div显隐的问题修复咨询

问题原因

你遇到的首次点击无效、需要双击的问题,根源在于初始状态下setter-container的style.width是空字符串。

因为你大概率是通过外部CSS(不是元素的style属性)设置的初始宽度4vw,而element.style.width只能读取内联样式(也就是写在元素标签里的style属性),所以第一次点击时,if (style.width == "4vw")的条件不成立,代码会进入else分支,把宽度重新设为4vw(和初始状态一样),看起来没变化;第二次点击时,style.width已经被设置成了4vw,条件才会成立,触发正确的展开逻辑。

修复方案

推荐用CSS类控制状态的方式,这种方法更健壮,也更容易维护:

步骤1:添加CSS类定义

在你的样式表中添加两个类,分别对应收缩和展开状态:

#setter-container {
  /* 可选:添加过渡动画,让切换更平滑 */
  transition: width 0.3s ease;
}

/* 收缩状态 */
#setter-container.collapsed {
  width: 4vw;
}

/* 展开状态 */
#setter-container.expanded {
  width: 95vw;
}

步骤2:修改HTML,给初始状态加类

给setter-container加上初始的collapsed类:

<div id="setter-container" class="collapsed">
  <!-- Button Right -->
  <div id="setter-arrow-right">
    <p>SETTER</p>
    <span id="setter-back">
      <p>>></p>
    </span>
  </div>
</div>

步骤3:修改JS逻辑,通过类切换状态

// 先获取元素,避免重复查询DOM,提升性能
const setterContainer = document.getElementById("setter-container");
const setterBack = document.getElementById("setter-back");
const scrapContainer = document.getElementById("scrap-container");

document.getElementById("setter-arrow-right").addEventListener("click", function() {
  // 判断当前是否处于收缩状态
  if (setterContainer.classList.contains("collapsed")) {
    // 切换到展开状态
    setterContainer.classList.remove("collapsed");
    setterContainer.classList.add("expanded");
    setterBack.innerHTML = `&lt;`;
    scrapContainer.style.display = "none";
  } else {
    // 切换到收缩状态
    setterContainer.classList.add("collapsed");
    setterContainer.classList.remove("expanded");
    setterBack.innerHTML = `&gt;`;
    scrapContainer.style.display = "block";
  }
});

备选方案(如果坚持用内联样式判断)

如果你不想用类,也可以直接给setter-container加上内联初始宽度,让style.width初始值就是4vw:

<div id="setter-container" style="width:4vw">

这样你的原JS代码就能正常工作,第一次点击就会触发展开逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:50:44