123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import { ref, watch } from 'vue';
- import { tryOnUnmounted } from '@vueuse/core';
- import { isFunction } from '/@/utils/is';
- export function useTimeoutFn(handle: Fn<any>, wait: number, native = false) {
- if (!isFunction(handle)) {
- throw new Error('handle is not 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 };
- }
|