9 changed files with 46 additions and 88 deletions
@ -1,45 +0,0 @@
|
||||
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 } |
||||
} |
Reference in new issue