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