如何在弹窗打开时只监听局部快捷键?

极客雪利 阅读 3

我在页面里有个 Modal 弹窗,想让它打开时按 Esc 能关闭,但又不影响页面其他地方的全局快捷键。现在的问题是,不管弹窗开没开,按 Esc 都会触发关闭逻辑。

我试过在弹窗组件里用 useEffect 加事件监听,但好像还是会和全局的冲突。比如这样:

useEffect(() => {
  const handleEsc = (e) => {
    if (e.key === 'Escape') closeModal();
  };
  window.addEventListener('keydown', handleEsc);
  return () => window.removeEventListener('keydown', handleEsc);
}, []);

结果一按 Esc,不仅弹窗关了,页面上其他监听 Escape 的功能也触发了。怎么才能让快捷键只在弹窗“聚焦”或“激活”时生效?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
一晶晶
一晶晶 Lv1
检查一下在添加事件监听器时,加个条件判断是否弹窗是打开状态。比如这样:
pre class="pure-highlightjs line-numbers">useEffect(() => {
const handleEsc = (e) => {
if (e.key === 'Escape' && isModalOpen) closeModal();
};
window.addEventListener('keydown', handleEsc);
return () => window.removeEventListener('keydown', handleEsc);
}, [isModalOpen]);

确保 isModalOpen 是控制弹窗显示状态的变量。
点赞
2026-03-22 20:01