firefish/packages/client/src/scripts/use-interval.ts

29 lines
574 B
TypeScript
Raw Normal View History

2023-07-20 04:17:05 +09:00
import { onMounted, onUnmounted } from "vue";
export function useInterval(
fn: () => void,
interval: number,
options: {
immediate: boolean;
afterMounted: boolean;
},
): void {
if (Number.isNaN(interval)) return;
let intervalId: number | null = null;
if (options.afterMounted) {
onMounted(() => {
if (options.immediate) fn();
intervalId = window.setInterval(fn, interval);
});
} else {
if (options.immediate) fn();
intervalId = window.setInterval(fn, interval);
}
onUnmounted(() => {
if (intervalId) window.clearInterval(intervalId);
});
}