뷰포트에 요소가 표시되는지 여부를 어떻게 알 수 있습니까?
시작하기 전에 브라우저 엔진에 비해 뷰포트가 무엇인지 설명하고 싶습니다.
A Viewport is the area (ordinarily rectangular) of our computer graphics (Screen) that is currently being viewed. In other words, it's the area of your computer screen that is currently visible to you (physically).
만약 나의 해석이 명확하지 않다면 MDN docs를 보셔서 깊은 해석을 얻으십시오.
왜 이것이 너에게 유용합니까?요소가 현재 브라우저의 뷰포트에 표시되는지 왜 알아야 합니까?
다음과 같은 경우에 유용합니다.
훈련하다
원소에 getBoundingClientRect() 함수를 사용하면 원소의 크기와 뷰포트에 대한 위치에 대한 정보를 제공하는 DOMRect 대상을 되돌려줍니다.
그래서 저희가
yourElement.getBoundingClientRect()또는elementInfo = yourElement.getBoundingClientRect()A DOMRect describes the size and position of a rectangle.
getBoundingClientRect()에서 반환된 DOMRect 객체는 대상을 계산하는 데 사용할 수 있는 키 값(픽셀 단위)이며, 채우기 및 경계 너비 등 전체 요소를 포함하는 최소 사각형입니다.반환된 객체는 다음과 같습니다.
{
x: 20,
y: 5.5,
width: 882,
height: 198.890625,
top: 5.5,
right: 902,
bottom: 204.390625,
left: 20,
};
좀 더 자세히 설명해 봅시다.혼동을 피하기 위해서 나는 시각을 분리했다.DOMRect 키 값(픽셀 단위)
The width and height properties of the DOMRect object returned by the method include the padding and border-width, not only the content width/height. In the standard box model, this would be equal to the width or height property of the element + padding + border-width. But if box-sizing: border-box is set for the element this would be directly equal to its width or height.
MDN Docs 상자 사이즈를 보실 수 있습니다.
전체 차트
만약 당신이 이 도표들이 어디에서 왔는지 알고 싶다면, 나는 Figma로 설계한 것이다
몇 가지 유용한 힌트
window.addEventListener("scroll", () => {
//Some javascript magic here...
});
뷰포트 높이 (화면) 에서 top/y 값을 간단하게 빼고, 밑에 있는 값이 0보다 크도록 검사할 수 있습니다.window.innerHeight 또는 document.documentElement.clientHeight를 사용하여 뷰포트 높이를 얻을 수 있지만, 일반적으로 innerHeight와 documentElement의 브라우저 호환성 때문에 뷰포트 높이를 결합하여 사용하는 것이 더 안전합니다.따라서 다음과 같은 방법을 사용할 수 있습니다.
const height =
window.innerHeight || document.documentElement.clientHeight;
따라서 로컬 가시성은 조건으로 간주됩니다.뷰포트 높이 - 위쪽은 0보다 크고 아래쪽은 0보다 큽니다.
const viewportHeight =
window.innerHeight || document.documentElement.clientHeight;
// condition
(viewportHeight - top > 0 && bottom > 0)
If this is getting a little rough, it might be helpful to use the diagram and a pen and paper (I definitely did).
아래쪽은 0보다 크고, 아래쪽은 뷰포트 높이보다 작거나 같으며, 위쪽은 0보다 크거나 같음
그래서 그것은 보기에 다음과 같다.
bottom > 0 && bottom <= viewportHeight && top >= 0
이 점에서 실시간 계산getBoundingClientRect() 값live website을 보면 좋을 것 같습니다.또한 이전에 수행한 모든 조건/검사가 어떻게 가시성 테스트를 통과했는지 이해하는 데 도움을 줄 것입니다.페이지를 스크롤하여 마술을 보기만 하면 된다.
이것은 매우 간단한 웹 페이지로 정성들여 제작하고 이해하기 쉬운 코드가 있다😎.
코드를 익히고 싶으면 마음대로 복제/갈라지기gitHub repo를 할 수 있습니다.
현재, 분명히 우리가 지금까지 한 모든 것은 수직으로 원소를 굴리기 위해서(상하 굴리기 & 상하 굴리기)였지만, 수평으로 원소를 굴리기 위해서(왼쪽 굴리기 & 오른쪽 굴리기)는?
다음과 같은 방법으로 조건을 브라우저 너비에 맞추어야 합니다.
(window.innerWidth || document.documentElement.clientWidth)
그래서 우리는 이런 물건이 있다.(right > 0 && right <= width)
브라우저 호환성
이렇게 본 강좌는 이것으로 끝냅니다.나는 네가 그것이 유용하다고 생각하기를 바란다.이 글을 다시 읽거나 보존하고 싶으면 책갈피를 작성하고like/unicorn을 남겨 두십시오🙂. 아래의 평론/토론 부분에서 당신의 생각(개선, 생각 등)을 알게 해 주세요.건배🥂.
Reference
이 문제에 관하여(뷰포트에 요소가 표시되는지 여부를 어떻게 알 수 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/emmaccen/how-to-know-if-an-element-is-visible-in-viewport-c45텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)