본문 바로가기

Study/예제

[back to Top] scrollTo 외 스크롤 관련 함수들

back to Top

: 문서의 길이가 세로로 긴 경우 화살표 버튼을 생성하고 그 버튼을 클릭하면 화면 상단으로 이동하는 효과

 

 

 

(js)

스크롤 양 확인하기

함수 명 설명
document.documentElement.scrollTop 문서에 발생한 세로 방향의 스크롤 양 확인
window.pageYOffset 윈도우에 발생한 세로 방향의 스크롤 양 확인
window.scrollY window.pageYOffset의 다른이름으로,
윈도우에 세로방향의 스크롤 양을 확인

 

스크롤 양 지정하기

함수 명 설명
document.documentElement.scrooTop = 0 문서의 스크롤 양을 0으로 지정
window.scrollTo(x, y) x축(가로), y축(세로) 방향 스크롤 양을 지정
window.scrollTo(0, 0) 윈도우의 스크롤 양을 0으로 지정
window.scrollBy(0, -50) 세로 방향 스크롤 양을 -50px 축소

 

 

 

 

구현할 내용

1. 스크롤이 생기면 스크롤 양을 확인한다.

 

2. 스크롤 양이 지정한 값보다 많으면 버튼에 클래스 명 active를 추가한다.

    지정한 값보다 작으면 다시 클래스 명을 제거한다.

 

3. 버튼을 클릭하면 스크롤 양을 0으로 변경하며 상단으로 이동한다.

 

 

 

예제)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Back to Top</title>
    <link rel="stylesheet" href="main.css">
    <link rel="stylesheet" href="http://cdn.jsdelivr.net/npm/xeicon@2.3.3/xeicon.min.css">
    <script src="main.js"></script>

</head>

<body>
    <div class="wrapper">
        <h1>Back to Top Animation</h1>
        <main>
            <h2>Main content</h2>
            <article>
                <h3>Article Title</h3>
                <p>
                    Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto mollitia
                    aspernatur
                    at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt est quidem.
                    Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto
                    mollitia
                    aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt
                    est
                    quidem. Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto
                    iusto
                    mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel
                    vitae
                    sunt
                    est quidem. Temporibus.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus
                    architecto
                    iusto mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur!
                    Vel
                    vitae
                    sunt est quidem. Temporibus.
                </p>
            </article>
            <article>
                <h3>Article Title</h3>
                <p>
                    Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto mollitia
                    aspernatur
                    at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt est quidem.
                    Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto
                    mollitia
                    aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt
                    est
                    quidem. Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto
                    iusto
                    mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel
                    vitae
                    sunt
                    est quidem. Temporibus.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus
                    architecto
                    iusto mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur!
                    Vel
                    vitae
                    sunt est quidem. Temporibus.
                </p>
            </article>
            <article>
                <h3>Article Title</h3>
                <p>
                    Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto mollitia
                    aspernatur
                    at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt est quidem.
                    Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto
                    mollitia
                    aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt
                    est
                    quidem. Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto
                    iusto
                    mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel
                    vitae
                    sunt
                    est quidem. Temporibus.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus
                    architecto
                    iusto mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur!
                    Vel
                    vitae
                    sunt est quidem. Temporibus.
                </p>
            </article>
            <article>
                <h3>Article Title</h3>
                <p>
                    Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto mollitia
                    aspernatur
                    at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt est quidem.
                    Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto iusto
                    mollitia
                    aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel vitae sunt
                    est
                    quidem. Temporibus. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus architecto
                    iusto
                    mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur! Vel
                    vitae
                    sunt
                    est quidem. Temporibus.Lorem ipsum dolor sit, amet consectetur adipisicing elit. Repellendus
                    architecto
                    iusto mollitia aspernatur at explicabo quo odit beatae! Dolore quae ad sint explicabo consequatur!
                    Vel
                    vitae
                    sunt est quidem. Temporibus.
                </p>
            </article>
        </main>
    </div>
    <a href="#" id="go-top" title="Back to Top">
        <i class="xi-caret-up"></i></a>

</body>

</html>
.wrapper{
    max-width: 960px; 
    width: 85%;
    /* 최대 너비가 960px,
    브라우저의 너비가 960px이하로 축소되면 그 너비의 85%크기를 차지한다*/
    margin: 0 auto;
}

article{
    margin: 4rem auto;
}


/* go-top btn */
#go-top{
    width: 48px;
    height: 48px;
    position: fixed;
    bottom: 48px;
    right: 48px;
    line-height: 48px;
    text-align: center;
    background-color: #444;
    color: #fff;

    opacity: 0;
    visibility: hidden;
    transition: opacity 0.5s;
    /* opacity만 낮춰도 보이지는 않지만 그 자리에 커서가 가면 링크가 작동할 수 있기에
    visibility속성으로 안보이게 한다.
    그리고 opacity가 변경되는 과정이 보이도록 하기 위해 transition속성 추가.*/
}

#go-top.active{
    opacity: 1;
    visibility: visible;
    /* active라는 클래스명이 생기면 버튼이 보이도록 한다.*/
}
// HTML의 요소들을 모두 로드한 다음에 function()에 지정한 코드를 실행한다.
document.addEventListener('DOMContentLoaded',function(){
   
   //변수 생성
   let btt = document.querySelector('#go-top'),
    docElem = document.documentElement,
    scrollAmount;
    
    window.addEventListener('scroll', function(){
    // window에 scroll이벤트가 발생하면
        scrollAmount = docElem.scrollTop;
        // 변수명 scrollAmount에 저장하고
        if(scrollAmount > 100){
            btt.className = 'active';
        // 그 값이 100보다 많으면 변수명 btt에 active를 추가하고
        } else {
            btt.classList.remove('active');
        } // 스크롤 양이 100보다 적으면 btt에서 active를 제거.
        
    });


    btt.addEventListener('click', function(e){
    //변수명 btt를 클릭하면 클릭된 요소의 기본속성을 매개변수e로 저장
        e.preventDefault(); // 링크 기본 속성 막기
        window.scrollTo({
            top: 0,
            left: 0,
            behavior:'smooth'
        });
        // HTML의 링크기능이 아니라 자바스크립트를 통해 부드럽게 상단으로 이동시키기
    });

});

 

 

 

 

완성