iter(g86): 弹层外部点击监听改按需挂载
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { effect, h, signal } from '@ui-arch/frame';
|
||||
import type { PopoverProps } from './types.js';
|
||||
import { flip } from './position.js';
|
||||
import { pushOverlay } from './overlay.js';
|
||||
import { bindOutside, pushOverlay } from './overlay.js';
|
||||
|
||||
let seq = 0; // 全局自增序号:保证每个弹层 id 唯一,供 aria-controls 关联
|
||||
|
||||
@@ -53,9 +53,7 @@ export function popover(props: PopoverProps, trigger: HTMLElement): HTMLElement
|
||||
toggle();
|
||||
});
|
||||
}
|
||||
root.addEventListener('keydown', (e: KeyboardEvent) => {
|
||||
});
|
||||
document.addEventListener('click', () => setOpen(false)); // 点外部收起(弹层内已阻止冒泡)
|
||||
bindOutside(root, open, () => setOpen(false)); // 点外部收起:仅展开期间挂监听,收起即摘
|
||||
effect(() => {
|
||||
if (open()) {
|
||||
releaseEsc ??= pushOverlay(() => { setOpen(false); trigger.focus(); }); // 入 Esc 栈:与弹窗/抽屉共用同一套逐层关闭
|
||||
|
||||
Reference in New Issue
Block a user