wujingjing
2024-11-05 fa315dbe5e37b6c8cf9f68df71f79978ad027c7d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//#region ====================== v-resize ======================
const resizeMap = new WeakMap();
const ob = new ResizeObserver((entries) => {
    for (const entry of entries) {
        // 获取dom元素的回调
        const handler = resizeMap.get(entry.target);
        //存在回调函数
        if (handler) {
            // 将监听的值给回调函数
            handler({
                width: entry.borderBoxSize[0].inlineSize,
                height: entry.borderBoxSize[0].blockSize,
            });
        }
    }
});
 
const resizeDirective = (el, callback) => {
    resizeMap.set(el, callback);
    ob.observe(el);
}
 
const clearResizeDirective = (el) => {
    ob.unobserve(el);
}
var elementResizeDirective = (app) => {
    app.directive('resize', {
        mounted(el, binding) {
            //将dom与回调的关系塞入map
            resizeMap.set(el, binding.value);
            //监听el元素的变化
            ob.observe(el);
        },
        unmounted(el) {
            //取消监听
            ob.unobserve(el);
        },
    });
};
 
//#endregion