>웹 프론트엔드 >CSS 튜토리얼 >요소가 뷰포트에 있을 때만 애니메이션을 적용하는 방법은 무엇입니까?

요소가 뷰포트에 있을 때만 애니메이션을 적용하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-20 13:12:13251검색

How to Animate Elements Only When They're in Viewport?

페이지 스크롤을 사용하여 뷰포트에서 요소 애니메이션

Q: 스크롤하는 동안 요소가 뷰포트에 표시되는 경우에만 웹페이지에 애니메이션을 표시하려면 어떻게 해야 합니까?

A: 이를 달성하려면 IntersectionObserver API를 활용할 수 있습니다.

Intersection Observer API

Intersection Observer API를 사용하면 요소와 상위 요소 또는 뷰포트 사이의 교차점을 관찰할 수 있습니다. 이를 통해 요소가 뷰포트 내에 표시되는지 여부에 따라 이벤트를 트리거할 수 있습니다.

다음은 API를 사용하여 애니메이션을 트리거하는 데 사용할 수 있는 클래스를 전환하는 예입니다.

const inViewport = (entries, observer) => {
  entries.forEach(entry => {
    entry.target.classList.toggle("is-inViewport", entry.isIntersecting);
  });
};

const Obs = new IntersectionObserver(inViewport);
const obsOptions = {};

// Attach observer to every [data-inviewport] element:
document.querySelectorAll('[data-inviewport]').forEach(el => {
  Obs.observe(el, obsOptions);
});

그런 다음 "is-inViewport" 클래스를 사용하여 요소에 CSS 전환 또는 애니메이션을 추가하여 요소가 뷰포트에 나타날 때 애니메이션을 적용할 수 있습니다. 예:

[data-inviewport] {
  width: 100px;
  height: 100px;
  background: #0bf;
  margin: 150vh 0;
}

/* inViewport */

[data-inviewport="scale-in"] {
  transition: 2s;
  transform: scale(0.1);
}
[data-inviewport="scale-in"].is-inViewport {
  transform: scale(1);
}

[data-inviewport="fade-rotate"] {
  transition: 2s;
  opacity: 0;
}
[data-inviewport="fade-rotate"].is-inViewport {
  transform: rotate(180deg);
  opacity: 1;
}

이 코드를 사용하면 [data-inviewport] 속성이 있는 요소에 CSS 전환이 적용됩니다. 뷰포트에 들어가면 is-inViewport 클래스가 추가되어 애니메이션을 트리거합니다.

위 내용은 요소가 뷰포트에 있을 때만 애니메이션을 적용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.