观察器
ElfUI 提供绑定到组件 scope 的 ResizeObserver 和 IntersectionObserver 封装。目标可以是 Element、useRef() / useTemplateRef() 的结果或响应式 getter。观察会在 mounted 后开始,跟随目标替换,忽略旧目标的延迟回调,并在 teardown 时自动断开。
useResizeObserver
ts
const panel = useTemplateRef<HTMLElement>("panel");
const width = useRef(0);
useResizeObserver(panel, (entry) => {
width.set(entry.width);
});适合布局、弹层定位、Canvas/WebGL resize 和响应式组件尺寸计算。应传入 ref 本身;如果在 setup 时传 panel.value,只会得到当时尚未挂载的 undefined。
useIntersectionObserver
ts
const root = useTemplateRef<HTMLElement>("root");
useIntersectionObserver(root, (entry) => {
if (entry.isIntersecting) {
visible.set(true);
}
});适合懒加载、滚动触发、Tour 引导定位。浏览器不提供对应 Observer API 时,helper 会保持未启用状态,不会让组件挂载失败。
