React Hooks_part 3.6_useScroll&useFullscreen

Eugenius1st·2022년 1월 7일
0

React Hooks

목록 보기
14/29

useScroll

때때로 유저가 지나쳤을 때 색상을 바꾸거나 한다.

import React, { useEffect, useState, useRef } from "react";
import ReactDOM from "react-dom";

//onbefore은 뭐가 되었던 function이 될 거니까 확인하자

const useScroll = () => {
  const [state, setState] = useState({
    x: 0,
    y: 0
  });
  const onScroll = (event) => {
    setState({ y: window.scrollY, x: window.scrollX });
    console.log(window.scrollY, window.scrollX);
  };
  useEffect(() => {
    window.addEventListener("scroll", onScroll);
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  return state;
};

export default function App() {
  const { y } = useScroll();
  return (
    <div className="App" style={{ height: "100vh" }}>
      <h1 style={{ posistion: "fixed", color: y > 10 ? "red" : "blue" }}>ff</h1>
    </div>
  );
}

scroll을 감지할 수 있다.

useFullscreen

버튼 두개를 만들어서 fullscreen으로 만들어 줄 것이다.


import React, { useEffect, useState, useRef } from "react";
import ReactDOM from "react-dom";

//onbefore은 뭐가 되었던 function이 될 거니까 확인하자

const useFullscreen = () => {
  const element = useRef();
  const triggerFull = () => {
    if (element.current) {
      element.current.requestFullscreen();
    }
  };
  return { element, triggerFull };
};

export default function App() {
  const { element, triggerFull } = useFullscreen();
  return (
    <div className="App">
      <img
        ref={element}
        src="https://www.bizhankook.com/upload/bk/article/202003/thumb/19690-45330-sampleM.jpg"
      />
      <button onClick={triggerFull}>MakeFullScreen</button>
    </div>
  );
}

다시 크기를 되돌려보자


import React, { useEffect, useState, useRef } from "react";
import ReactDOM from "react-dom";

//onbefore은 뭐가 되었던 function이 될 거니까 확인하자

const useFullscreen = () => {
  const element = useRef();
  const triggerFull = () => {
    if (element.current) {
      element.current.requestFullscreen();
    }
  };
  const exitFull = () => {
    document.exitFullscreen();
  };

  return { element, triggerFull, exitFull };
};

export default function App() {
  const { element, triggerFull, exitFull } = useFullscreen();
  return (
    <div className="App">
      <div ref={element}>
        <img src="https://www.bizhankook.com/upload/bk/article/202003/thumb/19690-45330-sampleM.jpg" />
        <button onClick={exitFull}>Exit FullScr</button>
      </div>
      <button onClick={triggerFull}>MakeFullScreen</button>
    </div>
  );
}

이론을 가지고 해볼 수 있다usecallBack을 가지고..
fullscreen이 되면 reiggerFull 은 nonFullScreen으로 만들어주는 function이 되도록..

콜백을 passing 했고 상태를 console.log 했다

import React, { useEffect, useState, useRef } from "react";
import ReactDOM from "react-dom";

//onbefore은 뭐가 되었던 function이 될 거니까 확인하자

const useFullscreen = (callback) => {
  const element = useRef();
  const triggerFull = () => {
    if (element.current) {
      element.current.requestFullscreen();
      if (callback && typeof callback === "function") {
        callback(true);
      }
    }
  };
  const exitFull = () => {
    document.exitFullscreen();
    if (callback && typeof callback === "function") {
      callback(false);
    }
  };

  return { element, triggerFull, exitFull };
};

export default function App() {
  const onFullS = (isFull) => {
    console.log(isFull ? "WeFull" : "Wesmall");
  };

  const { element, triggerFull, exitFull } = useFullscreen(onFullS);
  //여기서 callBack 받는다
  return (
    <div className="App">
      <div ref={element}>
        <img src="https://www.bizhankook.com/upload/bk/article/202003/thumb/19690-45330-sampleM.jpg" />
        <button onClick={exitFull}>Exit FullScr</button>
      </div>
      <button onClick={triggerFull}>MakeFullScreen</button>
    </div>
  );
}

작동하는데 많은 호환성 에러가 있으므로 if else 를 많이써야한다.

단지 element가 function을 가졌는지 확인하는 것이다.
예를들어 파이어폭스는 requestFullScreen이 아니다.


이게 그들이 fullScreen으로 바꿔주는 function 이름이다.

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글