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

如何设置emoji选择器弹窗默认隐藏 仅点击按钮时打开

问题原因

默认展开的问题由3个细节错误导致:

  • 初始HTML代码里,触发弹窗的按钮.emoji-btn默认就携带了open激活类,页面加载时直接处于激活状态
  • HTML里的注释标签未闭合,会打乱后续DOM结构解析
  • CSS缺少按钮定位基准、open状态关联弹窗的显隐样式,JS未提前获取DOM元素会导致交互逻辑直接报错
修复步骤

1. 修改HTML初始结构

移除按钮上默认携带的open类,同时修复未闭合的注释,初始状态保持未激活:

<div class="container">                                                                            
  <div class="emoji-btn">
    <img src='images/smileys.png' title='Smileys'>
    <!--this is the div I want to keep hidden till I click the button -->
    <div class="emoji-popup">
      <div class="emoji-wrapper"></div>
    </div>
  </div>
</div>

2. 补全必要CSS样式

给按钮添加相对定位作为弹窗的定位基准,新增open类激活时弹窗的可见样式,补全后完整CSS如下:

.emoji-btn {
  /* 作为内部绝对定位弹窗的基准元素 */
  position: relative;
  cursor: pointer;
}

.emoji-popup {
  position: absolute;
  top: -140px;
  left: 10px;
  height: 130px;
  width: 194px;
  background: #999;
  border-radius: 2px;
  text-align: left;
  overflow-y: auto;
  /* 默认隐藏状态 */
  opacity: 0;
  pointer-events: none;
  transition: all 0.25s;
  box-sizing: border-box;
}

/* 按钮激活时弹窗显示 */
.emoji-btn.open .emoji-popup {
  opacity: 1;
  pointer-events: auto;
}

.emoji-wrapper {
  overflow: hidden;
  padding: 10px;
  box-sizing: border-box;
}
.emoji-popup .emoji-img {
  margin: auto;
  width: 30px;
  height: 30px;
  text-align: center;
  border-radius: 5px;
}

.emoji-popup .emoji-img:hover {
  background: rgba(0, 0, 0, 0.25);
}

3. 补全JS元素获取逻辑

在绑定事件前先获取按钮DOM节点,避免JS报错,完整JS如下:

// 提前获取按钮DOM元素
const emojibtn = document.querySelector('.emoji-btn');

emojibtn.addEventListener("click", function (e) {
  e.stopPropagation();
  this.classList.toggle("open");
});

document.body.addEventListener("click", function () {
  emojibtn.classList.remove("open");
});

修改完成后页面加载时弹窗默认处于关闭状态,仅点击表情按钮时才会展开,点击页面其他区域会自动关闭弹窗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:36:17