@fe6/water-pro
Version:
An enterprise-class UI design language and Vue-based implementation
50 lines (40 loc) • 1 kB
text/typescript
/** @format */
import { ref, watch } from 'vue';
import { isFunction } from '@fe6/shared';
import { tryOnUnmounted } from '../vue';
import warning from '../warning';
export function useTimeoutFn(handle: Fn<any>, wait: number, native = false) {
if (!isFunction(handle)) {
warning('handle 参数是必须是 Function 类型!');
}
const { readyRef, stop, start } = useTimeoutRef(wait);
if (native) {
handle();
} else {
watch(
readyRef,
maturity => {
maturity && handle();
},
{ immediate: false },
);
}
return { readyRef, stop, start };
}
export function useTimeoutRef(wait: number) {
const readyRef = ref(false);
let timer: TimeoutHandle;
function stop(): void {
readyRef.value = false;
timer && window.clearTimeout(timer);
}
function start(): void {
stop();
timer = setTimeout(() => {
readyRef.value = true;
}, wait);
}
start();
tryOnUnmounted(stop);
return { readyRef, stop, start };
}