티스토리 뷰

728x90
반응형

 

 

안녕하세요 

찐망고입니다.

 

스크롤을 내리다 보면 어느 틈인가 나타나는 탑버튼..

다시 스크롤을 올리면 사라지는데요

그거 해볼 거임

 

이전 탑버튼애니메이션도 참고해 주시고요

 

자바스크립트 top 버튼 애니메이션

안녕하세요 찐망고입니다. 웹사이트에서 페이지가 길어질 때 나오는 top버튼 top버튼을 누르면 자연스럽게 페이지위로 올라가는 애니메이션을 적용해 볼까 합니다. 제이쿼리에는 animate()라는 메

uiweb.tistory.com

 

 

 

jQuery

// top버튼 애니메이션
$(".topBtn").click(function() {
    $("html, body").animate({ scrollTop: 0 }, 500);
    return false;
}) 

// 스크롤 이벤트
$(".topBtn").hide();

$(window).on('scroll', function(){
    const scrollTop = $(window).scrollTop();
    const scrollOffset = $(".story").offset().top;

    console.log(scrollTop, scrollOffset)

    if(scrollTop < scrollOffset) {
        $(".topBtn").hide();
    } else {
        $(".topBtn").show();
    }
})

 

 

Javascript

// top버튼 애니메이션
const topBtn = document.querySelector(".topBtn");
topBtn.addEventListener("click", function() {
    window.scrollTo({ top: 0, behavior: 'smooth' });
    return false;
});

// 스크롤이벤트
topBtn.style.display = "none";

window.addEventListener('scroll', function() {
    // pageYOffset은 현재 스크롤 위치를 가져오는 속성
    // 모든 브라우저가 지원하지 않을 수 있으므로 두 값중 하나라도 정의되어 있으면 그 값을 할당
    // window.scrollY가 window.pageYOffset과 동일한 값을 반환
    const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
    const scrollOffset = document.querySelector(".story").offsetTop;

    console.log(scrollTop, scrollOffset);

    if (scrollTop < scrollOffset) {
    	topBtn.style.display = "none";
    } else {
    	topBtn.style.display = "block";
    }
});

 

이전 포스팅과 비교해 볼 때 top버튼 애니메이션 코드가 조금 다른데요.

이번 코드가 조금 더 간단하고 직관적이죠?

단점이라면 'smooth'는 최신브라우저에서 지원되지만, IE11 이전 버전에선 지원되지 않습니다.

머 지금이야 상관없겠죠?

 

아래 스크롤 이벤트 코드는 현재 스크롤 위치를 가져오는 것인데

일부 오래된 버전에서는 ' window.pageYOffset'이나 ' document.documentElement.scrollTop'을

지원하지 않을 수 있어 대비된 코드가 필요합니다.

 

 

아래는 수정된 코드입니다.

const topBtn = document.querySelector('.topBtn');
topBtn.style.display = "none";

function getScrollTop() {
    return window.pageYOffset !== undefined ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
}

window.addEventListener('scroll', function() {
    const scrollTop = getScrollTop();
    const scrollOffset = document.querySelector(".story").offsetTop;

    console.log(scrollTop, scrollOffset);

    if (scrollTop < scrollOffset) {
        topBtn.style.display = "none";
    } else {
        topBtn.style.display = "block";
    }
});
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함