From 6307a017a3bee9db07e2f268ebf10ec04e0debb4 Mon Sep 17 00:00:00 2001 From: logan Date: Fri, 18 Sep 2026 01:15:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BC=B9=E5=87=BA?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E5=9C=A8=E6=96=B0=E6=8C=89=E9=92=AE=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E5=90=8E=E5=8D=B3=E5=BC=80=E5=8D=B3=E5=85=B3=EF=BC=88?= =?UTF-8?q?=E6=94=B9=E7=94=A8=20pointerdown=20=E6=8D=95=E8=8E=B7=E5=85=B3?= =?UTF-8?q?=E9=97=AD=EF=BC=8CWKWebView=20=E4=B8=8B=E5=A4=8D=E7=8E=B0?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/ui/src/components/common.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/components/common.tsx b/packages/ui/src/components/common.tsx index 476128c..da4d97f 100644 --- a/packages/ui/src/components/common.tsx +++ b/packages/ui/src/components/common.tsx @@ -73,13 +73,19 @@ export function ContextMenu({ useEffect(() => { if (!menu) return; - const close = () => onClose(); + // pointerdown(capture) 关闭:打开菜单的那次交互已完成 pointerdown, + // 不会被自己关掉(click 监听在 WKWebView 等环境存在"即开即关"竞态) + const close = (e: Event) => { + const panel = ref.current; + if (panel && e.target instanceof Node && panel.contains(e.target)) return; + onClose(); + }; const onKey = (e: KeyboardEvent) => e.key === "Escape" && onClose(); - window.addEventListener("click", close); + window.addEventListener("pointerdown", close, true); window.addEventListener("resize", close); window.addEventListener("keydown", onKey); return () => { - window.removeEventListener("click", close); + window.removeEventListener("pointerdown", close, true); window.removeEventListener("resize", close); window.removeEventListener("keydown", onKey); };