UNPKG

@aleph-us/header-components

Version:
46 lines (45 loc) 1.58 kB
import { useEffect, useState } from "react"; export default function useIdle(ms) { const [idle, setIdle] = useState(false); useEffect(() => { let timeoutId; const handleTimeout = () => { setIdle(true); }; const handleEvent = throttle(() => { setIdle(false); clearTimeout(timeoutId); timeoutId = setTimeout(handleTimeout, ms); }, 500); if (!ms) { return; } timeoutId = setTimeout(handleTimeout, ms); window.addEventListener("mousemove", handleEvent); window.addEventListener("mousedown", handleEvent); window.addEventListener("resize", handleEvent); window.addEventListener("keydown", handleEvent); window.addEventListener("touchstart", handleEvent); window.addEventListener("wheel", handleEvent); return () => { window.removeEventListener("mousemove", handleEvent); window.removeEventListener("mousedown", handleEvent); window.removeEventListener("resize", handleEvent); window.removeEventListener("keydown", handleEvent); window.removeEventListener("touchstart", handleEvent); window.removeEventListener("wheel", handleEvent); window.clearTimeout(timeoutId); }; }, [ms]); return idle; } function throttle(cb, ms) { let lastTime = 0; return () => { const now = Date.now(); if (now - lastTime >= ms) { cb(); lastTime = now; } }; }