From 9b62cb8a9384bd07a845b56a4ef47003890e823d Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Wed, 5 Oct 2022 13:51:28 +0900 Subject: [PATCH] Add hover controls --- front/src/pages/watch/[slug].tsx | 133 +++++++++++++++++++------------ 1 file changed, 82 insertions(+), 51 deletions(-) diff --git a/front/src/pages/watch/[slug].tsx b/front/src/pages/watch/[slug].tsx index 7d4f01de..be93c791 100644 --- a/front/src/pages/watch/[slug].tsx +++ b/front/src/pages/watch/[slug].tsx @@ -447,6 +447,9 @@ const query = (slug: string): QueryIdentifier => ({ parser: WatchItemP, }); +// +let mouseCallback: NodeJS.Timeout; + const Player: QueryPage<{ slug: string }> = ({ slug }) => { const { data, error } = useFetch(query(slug)); const { @@ -458,18 +461,36 @@ const Player: QueryPage<{ slug: string }> = ({ slug }) => { setProgress, setVolume, } = useVideoController(); - const [showHover, setHover] = useState(true); + const [showHover, setHover] = useState(false); + const [mouseMoved, setMouseMoved] = useState(false); + + useEffect(() => { + const handler = () => { + setMouseMoved(true); + if (mouseCallback) clearTimeout(mouseCallback); + mouseCallback = setTimeout(() => { + setMouseMoved(false); + }, 2500); + }; + + document.addEventListener("mousemove", handler); + return () => document.removeEventListener("mousemove", handler); + }); const name = data ? data.isMovie ? data.name : `${episodeDisplayNumber(data, "")} ${data.name}` : undefined; + const displayControls = showHover || !isPlaying || mouseMoved; if (error) return ; return ( - <> + setMouseMoved(false)} + sx={{ cursor: displayControls ? "unset" : "none" }} + > = ({ slug }) => { }} /> {isLoading && } - {showHover && ( - <> - - - - - - {name ?? } - + setHover(true)} + onMouseLeave={() => setHover(false)} + sx={ displayControls ? { + visibility: "visible", + opacity: 1, + transition: "opacity .2s ease-in", + } : { + visibility: "hidden", + opacity: 0, + transition: "opacity .4s ease-out, visibility 0s .4s", + }} + > + + + + + + {name ?? } + - + - - - - - {toTimerString(progress, duration)} : {toTimerString(duration)} - - - + + + + + {toTimerString(progress, duration)} : {toTimerString(duration)} + + - - )} - + + + ); };