mouse-scroll

동영상 플레이어 중 영상의 비율을 맞춰주기 위해 영상의 세로가 긴 화면은 양쪽에 검은색 여백이, 영상의 가로가 긴 화면은 상하단에 검은색 여백이 생성되는 플레이어들이 있습니다.

검은색 여백은 video 태그에 width: 100% or height:100% 중 어떤 속성인지로 적용됩니다.

여기서 video 태그를 감싸고 있는 div보다 video 태그의 height가 높아지면 height를 100%로 고정하여 양 옆에 여백을 생성하고, width가 높아지면 width를 100%로 고정하여 상하에 여백을 생성합니다.

동영상의 비율을 수정하자

useRef를 사용해도 무방합니다.

  • useLayoutEffect를 사용하여 화면의 resize를 감지하고 함수를 실행합니다.
  • updateSize 함수에서 video 사이즈와 video-wrap 사이즈를 비교하고 클래스를 적용합니다.
    • contains로 현재 클래스를 비교한 이유는 이미 적용되어있기 때문에 if문을 거쳐도 변화가 없기 때문입니다.
import React, { useLayoutEffect } from "react";

const Video = () => {
  const updateSize = () => {
    const videoWrap = document.querySelector("#video-wrap");
    const video = document.querySelector("#video");
    if (
      !video.classList.contains("is-vertical") &&
      video.offsetHeight > videoWrap.offsetHeight
    ) {
      video.classList.add("is-vertical");
    } else if (
      video.classList.contains("is-vertical") &&
      video.offsetWidth > videoWrap.offsetWidth
    ) {
      video.classList.remove("is-vertical");
    }
  };

  useLayoutEffect(() => {
    window.addEventListener("resize", updateSize);
    return () => window.removeEventListener("resize", updateSize);
  }, []);

  return (
    <div id='video-wrap'>
      <video id='video' />
    </div>
  );
};

export default Video;

CSS

video {
  width: 100%;
}
video.is-vertical {
  width: auto !important;
  height: 100%;
}
이런 글은 어떠신가요?