본문 바로가기
개발/Javascript

[js] 페이지 상단으로 자동 스크롤 이동 구현 (ft. gsap scrollTo)

by 코딩하는 갓디노 2021. 6. 13.

페이지 상단 이동 스크롤 탑버튼

 

우측 하단의 버튼 클릭시
화면의 상단으로 이동하는
애니메이션 효과를 구현합니다. 

 

구현 내용

- material-icon, css 이용하여 버튼 만들기
- 버튼 클릭 시 화면이 페이지의 최상단으로 애니메이션 효과를 내면서 이동
- 페이지 최상단으로 이동하면서 버튼이 우측으로 사라짐
- 스크롤 내리면 일정 부분부터 버튼이 우측에서 나옴

 

구현 화면

스크롤 버튼 작동화면은 맨 아래에서 확인해주세요.

 

스크롤 탑 버튼 구현

material-icon, gsap cdn 설치

구글에서 material icon cdn을 검색 후 페이지로 이동하여 cdn 코드 복사 후 <head> 태그 사이에 삽입해주세요.

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

 

구글에서 gsap cdn을 검색하여 페이지 이동 후 gsap.min.js와 ScrollToPlugin.min.js 코드를 복사 후 <head> 태그 사이에 삽입해주세요.

<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.6.1/gsap.min.js" integrity="sha512-cdV6j5t5o24hkSciVrb8Ki6FveC2SgwGfLE31+ZQRHAeSRxYhAQskLkq3dLm8ZcWe1N3vBOEYmmbhzf7NTtFFQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.6.1/ScrollToPlugin.min.js" integrity="sha512-kSI9CgGh60rJbNVeMJvfNX0UTKAq8LEOea/yKJQbFpIroxT7bf9/zUFXbnfsQP5F6xlOOHtCfBPgsE1ceiHnRw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

 

html

<div id="goto-top">
  <div class="material-icons">arrow_upward</div>
</div>

 

css

body { 	//버튼을 쉽게 보여주기 위해 지정-무의미
  height: 1500px;
  background-color: #dedede;
}

#goto-top {
  position: fixed;
  bottom: 30px;
  right: 30px;
  z-index: 9;
  width: 42px;
  height: 42px;
  background-color: #333;
  color: #fff;
  border: 2px solid #fff;
  border-radius: 50%;
  cursor: pointer;
  display: flex;
  justify-content: center;
  align-items: center;
}

 

script

const gotoTopEl = document.querySelector('#goto-top')
window.addEventListener('scroll', function() {
  if (window.scrollY > 500) { // 페이지 스크롤 위치가 500px이 넘으면
    //상단으로 스크롤 버튼 보이기
    gsap.to(gotoTopEl, .2, {
      x: 0
    })
  } else { // 페이지 스크롤 위치가 500px이 넘지 않으면.
    gsap.to(gotoTopEl, .2, { // 상단으로 스크롤 버튼 숨기기
      x: 100
    })
  }
}, 300)
gotoTopEl.addEventListener('click', function() { //스크롤 버튼 클릭시
  gsap.to(window, .7, { // 페이지 최상단으로 0.7초 동안부드럽게 이동
    scrollTo: 0
  })
})

 

화면 보기 (Result 클릭)

반응형

댓글