index.js 1.01 KB
Newer Older
周宏民's avatar
周宏民 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
/*
 * @Title:
 * @Author: hongmye
 * @Date: 2023-01-10 11:18:55
 */
import { useCallback, useEffect, useRef, useState } from 'react';

const useFullScreen = needFullscreen => {
  const [isFullscreen, setIsFullscreen] = useState(!!document.fullscreenElement);
  const ref = useRef();

  useEffect(() => {
    const handleToggleFullScreen = () => {
      setIsFullscreen(!!document.fullscreenElement);
    };
    document.addEventListener('fullscreenchange', handleToggleFullScreen);
    return () => {
      document.removeEventListener('fullscreenchange', handleToggleFullScreen);
    };
  }, []);

  const handleFullScreen = useCallback(() => {
    ref.current?.requestFullscreen && ref.current?.requestFullscreen();
  }, []);

  const handleExitFullScreen = useCallback(() => {
    document.exitFullscreen();
  }, []);

  useEffect(() => {
    needFullscreen && handleFullScreen();
  }, [handleFullScreen, needFullscreen]);

  return [ref, isFullscreen, handleFullScreen, handleExitFullScreen];
};

export default useFullScreen;