CNCEC_APP/uni_modules/uview-pro/libs/hooks/useRect.ts

41 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-03-25 14:54:15 +08:00
import { getCurrentInstance, nextTick, ref } from 'vue';
/**
* useRect -
* @param selector #id .class
* @param all
* @returns rect refresh
*/
export function useRect(selector: string | null = null, all = false) {
const rect = ref<any>(all ? [] : null);
const instance = getCurrentInstance();
async function getRect(realSelector: string | null = null, delay = 0): Promise<any> {
realSelector = realSelector || selector;
if (!realSelector) return rect.value;
await nextTick();
return new Promise(resolve => {
setTimeout(() => {
uni.createSelectorQuery()
.in(instance?.proxy)
[all ? 'selectAll' : 'select'](realSelector as string)
.boundingClientRect((res: any) => {
rect.value = res;
resolve(res);
})
.exec();
}, delay);
});
}
function refresh(selector?: string | null, delay?: number): Promise<any> {
return getRect(selector, delay);
}
return {
rect,
getRect,
refresh
};
}