>웹 프론트엔드 >CSS 튜토리얼 >요소가 보기로 스크롤될 때만 CSS3 애니메이션을 트리거하려면 어떻게 해야 합니까?

요소가 보기로 스크롤될 때만 CSS3 애니메이션을 트리거하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-09 00:54:11747검색

How Can I Trigger CSS3 Animations Only When an Element Scrolls into View?

콘텐츠가 뷰로 스크롤될 때 CSS3 애니메이션 활성화

요소의 위치가 뷰포트를 벗어나면 뷰에서 숨겨집니다. 성능을 최적화하기 위해 CSS3 애니메이션은 요소가 뷰포트 내에 나타날 때만 시작될 수 있습니다. 이는 페이지 위에 상당한 콘텐츠가 있는 페이지 아래에 배치된 요소에 특히 유용합니다.

이를 달성하기 위해 우리는 스크롤 이벤트를 캡처하기 위해 JavaScript 또는 jQuery를 사용합니다. 스크롤 이벤트가 트리거되면 코드는 대상 요소가 뷰포트로 스크롤되었는지 확인합니다. 그렇다면 표시 클래스가 요소에 추가되어 애니메이션이 시작됩니다.

코드 구현:

HTML:

<div class="bar">
    <div class="level eighty">80%</div>
</div>

CSS:

.eighty.start {
    width: 0px;
    background: #aae0aa;
    -webkit-animation: eighty 2s ease-out forwards;
       -moz-animation: eighty 2s ease-out forwards;
        -ms-animation: eighty 2s ease-out forwards;
         -o-animation: eighty 2s ease-out forwards;
            animation: eighty 2s ease-out forwards;
}

jQuery:

function isElementInViewport(elem) {
    var $elem = $(elem);

    // Scroll position
    var viewportTop = $(window).scrollTop();
    var viewportBottom = viewportTop + $(window).height();

    // Element position
    var elemTop = $elem.offset().top;
    var elemBottom = elemTop + $elem.height();

    return (elemTop < viewportBottom) && (elemBottom > viewportTop);
}

function checkAnimation() {
    var $elem = $('.bar .level');

    if ($elem.hasClass('start')) return;
    
    if (isElementInViewport($elem)) {
        $elem.addClass('start');
    }
}

$(window).scroll(function(){
    checkAnimation();
});

위 내용은 요소가 보기로 스크롤될 때만 CSS3 애니메이션을 트리거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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