본문 바로가기

Java Scripts/React.js

Hook in React - useFullScreen

728x90

note)iFrame에서는 동작하지 않았고 새창에서 실행하는 경우에 동작하였다.

 

note) 변수 뿐만이 아니라 api 도 return 하여 외부에서 이용이 가능하였다.

 

note)  Exit Fullscreen 과  Make Fullscreen button 이 있어서 동작이 가능하였다.

import { useRef } from "react";

export const useFullscreen = callback => {
    const element = useRef();
    const runCb = isFull => {
      if (callback && typeof callback === "function") {
        callback(isFull);
      }
    };
    const triggerFull = () => {
      if (element.current) {
        if (element.current.requestFullscreen) {
          element.current.requestFullscreen();
        } else if (element.current.mozRequestFullScreen) {
          element.current.mozRequestFullScreen();
        } else if (element.current.webkitRequestFullscreen) {
          element.current.webkitRequestFullscreen();
        } else if (element.current.msRequestFullscreen) {
          element.current.msRequestFullscreen();
        }
        runCb(true);
      }
    };
    const exitFull = () => {
      document.exitFullscreen();
      if (document.exitFullscreen) {
        document.exitFullscreen();
      } else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
      } else if (document.webkitExitFullscreen) {
        document.webkitExitFullscreen();
      } else if (document.msExitFullscreen) {
        document.msExitFullscreen();
      }
      runCb(false);
    };
    return { element, triggerFull, exitFull };
};


export default function App() {
  const onFullS = (isFull) => {
    console.log(isFull ? "We are full" : "We are small");
  };

  const { element, triggerFull, exitFull } = useFullscreen(onFullS);
  return (
    <div className="App" style={{ height: "1000vh" }}>
      <div ref={element}>
        <img src="https://i.ibb.co/R6RwNxx/grape.jpg" alt="grape" width="250" />
        <button onClick={exitFull}>Exit Fullscreen</button>
      </div>
      <button onClick={triggerFull}>Make Fullscreen</button>
    </div>
  );
}

'Java Scripts > React.js' 카테고리의 다른 글

Hook in React - usePreventLeave  (0) 2023.10.07
Hook in React - useAxios  (0) 2023.09.28
Hook in React - useFadeIn  (0) 2023.09.28
Hook in React - useConfirm  (0) 2023.09.28
Hook in React - useHover  (0) 2023.09.28