diff --git a/src/__stories__/useFullscreen.story.tsx b/src/__stories__/useFullscreen.story.tsx index bc55e401..dcfab63b 100644 --- a/src/__stories__/useFullscreen.story.tsx +++ b/src/__stories__/useFullscreen.story.tsx @@ -7,7 +7,10 @@ const Demo = () => { const [show, toggle] = useToggle(false); const ref = React.useRef(null) const videoRef = React.useRef(null) - const isFullScreen = useFullscreen(ref, show, {onClose: () => toggle(false)}); + const isFullScreen = useFullscreen(ref, show, { + onClose: () => toggle(false), + video: videoRef + }); const controls = (
diff --git a/src/useFullscreen.ts b/src/useFullscreen.ts index cd5c21d6..b6c91424 100644 --- a/src/useFullscreen.ts +++ b/src/useFullscreen.ts @@ -2,7 +2,7 @@ import {useLayoutEffect, RefObject, useState} from 'react'; import screenfull from 'screenfull'; export interface FullScreenOptions { - video?: HTMLVideoElement; + video?: RefObject; onClose?: (error?: Error) => void; } @@ -17,7 +17,7 @@ const useFullscreen = (ref: RefObject, on: boolean, options: FullScreen if (!ref.current) return; const onWebkitEndFullscreen = () => { - video!.removeEventListener('webkitendfullscreen', onWebkitEndFullscreen); + video!.current!.removeEventListener('webkitendfullscreen', onWebkitEndFullscreen); onClose(); }; @@ -40,15 +40,13 @@ const useFullscreen = (ref: RefObject, on: boolean, options: FullScreen setIsFullscreen(false); } screenfull.on('change', onChange); + } else if (video && video.current && video.current.webkitEnterFullscreen) { + video.current.webkitEnterFullscreen(); + video.current.addEventListener('webkitendfullscreen', onWebkitEndFullscreen); + setIsFullscreen(true); } else { - if (video && video.webkitEnterFullscreen) { - video.webkitEnterFullscreen(); - video.addEventListener('webkitendfullscreen', onWebkitEndFullscreen); - setIsFullscreen(true); - } else { - onClose(); - setIsFullscreen(false); - } + onClose(); + setIsFullscreen(false); } return () => { @@ -58,9 +56,9 @@ const useFullscreen = (ref: RefObject, on: boolean, options: FullScreen screenfull.off('change', onChange); screenfull.exit(); } catch {} - } else if (video && video.webkitExitFullscreen) { - video.removeEventListener('webkitendfullscreen', onWebkitEndFullscreen); - video.webkitExitFullscreen(); + } else if (video && video.current && video.current.webkitExitFullscreen) { + video.current.removeEventListener('webkitendfullscreen', onWebkitEndFullscreen); + video.current.webkitExitFullscreen(); } } }, [ref.current, video, on]);