diff options
| author | Pinapelz <yukais@pinapelz.com> | 2023-11-14 19:08:14 -0800 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2023-11-14 19:08:14 -0800 |
| commit | 7b6d5f1666e428c37c936bd6b01323c3a6399ac6 (patch) | |
| tree | 981126f91f26c7419600a7496e76a16af9fa6988 /src/app/use_timer.ts | |
| parent | a7701e6183956531a6930fac484acb52e22baf85 (diff) | |
Initial commit - barebone lrc player
Diffstat (limited to 'src/app/use_timer.ts')
| -rw-r--r-- | src/app/use_timer.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/app/use_timer.ts b/src/app/use_timer.ts new file mode 100644 index 0000000..487591d --- /dev/null +++ b/src/app/use_timer.ts @@ -0,0 +1,33 @@ +import { useEffect, useState, useCallback } from "react"; + +function useTimer(speed = 1) { + const [paused, setPaused] = useState(true); + const play = useCallback(() => setPaused(false), []); + const pause = useCallback(() => setPaused(true), []); + + const [currentMillisecond, setCurrentMillisecond] = useState(0); + const reset = useCallback(() => setCurrentMillisecond(0), []); + + useEffect(() => { + if (!paused) { + let last = Date.now(); + const timer = window.setInterval(() => { + const now = Date.now(); + setCurrentMillisecond((cm) => cm + (now - last) * speed); + last = now; + }, 97); + return () => window.clearInterval(timer); + } + }, [paused, speed]); + + return { + currentMillisecond, + setCurrentMillisecond, + reset, + paused, + play, + pause + }; +} + +export default useTimer;
\ No newline at end of file |
