CSS3 및 IntersectionObserver API를 사용하여 뷰포트에 있는 요소에만 애니메이션을 적용하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-11-15 11:59:02
원래의
901명이 탐색했습니다.

How can I animate elements only when they are in the viewport using CSS3 and IntersectionObserver API?

뷰포트의 요소 애니메이션

CSS3에서는 HTML 요소에 애니메이션을 추가하여 특정 조건이 충족될 때 HTML 요소를 움직이거나 모양을 변경할 수 있습니다. . 그러나 요소가 뷰포트에 표시될 때만 이러한 애니메이션이 재생되도록 하려면 IntersectionObserver API를 사용할 수 있습니다.

IntersectionObserver API 사용

IntersectionObserver API 뷰포트 또는 상위 요소와 요소의 교차를 관찰할 수 있습니다. 요소가 표시되면(예: 뷰포트와 교차) 클래스 전환이나 애니메이션 실행과 같은 작업을 트리거할 수 있습니다.

다음은 IntersectionObserver를 사용한 구현 예입니다.

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

const Obs = new IntersectionObserver(inViewport);
const obsOptions = {}; //See: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#Intersection_observer_options

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

inViewport 함수에서는 요소가 뷰포트와 교차하는지(예: Entry.isIntersecting) 확인하고 대상 요소에서 is-inViewport 클래스를 토글합니다.

애니메이션 스타일을 지정하려면 CSS 전환을 사용할 수 있습니다. 또는 평소대로 키프레임을 사용합니다. 예를 들어 다음과 같이 data-inviewport="scale-in"을 사용하여 요소에 대한 애니메이션을 정의할 수 있습니다.

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

[data-inviewport="scale-in"].is-inViewport { 
  transform: scale(1);
}
로그인 후 복사

이 설정을 사용하면 요소가 10%에서 100%로 확장됩니다. 뷰포트에 표시됩니다.

위 내용은 CSS3 및 IntersectionObserver API를 사용하여 뷰포트에 있는 요소에만 애니메이션을 적용하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿