728x90
// useFullscreen.js
import React, { useRef } from "react";
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 useFullscreen;
// index.js
import React, { useRef } from "react";
import ReactDOM from "react-dom";
import useFullscreen from "./useFullscreen";
const 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
style={{ height: "500px" }}
src="https://pbs.twimg.com/media/Dp6hsEFV4AA_GN-.jpg"
/>
<br />
<button onClick={exitFull}>Exit fullscreen</button>
</div>
<button onClick={triggerFull}>Make fullscreen</button>
</div>
);
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
전체화면은 브라우저마다 코드가 다르므로
if문을 통해 브라우저를 확인하고 그에 맞는 전체화면 코드를 실행시켰습니다.
'React' 카테고리의 다른 글
[React] Axios (0) | 2021.01.09 |
---|---|
[React] 알림 보내기 (0) | 2021.01.09 |
[React] 스크롤 (0) | 2021.01.09 |
[React] 현재 네트워크 상태 확인 (4) | 2021.01.08 |
[React] 동적 스타일 적용 (2) | 2021.01.08 |