aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/use_timer.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/use_timer.ts')
-rw-r--r--src/app/use_timer.ts33
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
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage