sakura/src/hooks/useIntervalWatcher.ts

21 lines
553 B
TypeScript

import { onMounted, onUnmounted, onActivated, onDeactivated } from 'vue'
const useIntervalWatcher = (func: () => void, interval = 100): void => {
let timer = NaN
const addWatcher = () => {
if (timer) return
timer = window.setInterval(func, interval)
}
const removeWatcher = () => {
if (!timer) return
window.clearInterval(timer)
timer = NaN
}
onMounted(() => addWatcher())
onActivated(() => addWatcher())
onUnmounted(() => removeWatcher())
onDeactivated(() => removeWatcher())
}
export default useIntervalWatcher