알아두자 HTML, CSS
[HTML/CSS][Ch9][스타벅스] 페이지 상단으로 이동(ScrollTo)
써치킴
2022. 1. 21. 05:38
gsap > ScollToPlugin 사용
- 구글에 gsap cdn 검색 > scrollToPlugin 찾고 사용
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/ScrollToPlugin.min.js" integrity="sha512-agNfXmEo6F+qcj3WGryaRvl9X9wLMQORbTt5ACS9YVqzKDMzhRxY+xjgO45HCLm61OwHWR1Oblp4QSw/SGh9SA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
index.html -> ScrollTo 버튼 추가
<!--TO TOP BUTTON-->
<div id="to-top">
<div class="material-icons">arrow_upward</div>
</div>
main.css -> ScrollTo 버튼 추가
/*SCROLL TO TOP*/
#to-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: 10px;
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
}
main.js -> scroll 기능 수정 및 scrollTo 기능 추가
/**
* 배지
*/
const badgeEl = document.querySelector('header .badges');
// window 객체 : 브라우저 창을 의미
/* 화면을 스크롤할 때 (스크롤할때마다 해당함수가 실행되기 때문에 사이트 자체가 무거워짐 -> 화면 버벅임 현상 발생)
window.addEventListener('scroll', function () {
console.log('scroll!!');
}); */
// _.throttle(함수, 시간) : 0.3초 단위(사용자 지정)로 부하를 줘서 함수가 연속으로 실행되는 것을 방지 (lodash.js)
window.addEventListener('scroll', _.throttle(function () {
// window.scrollY : 화면이 몇 px 지점에 위치하는지 확인
if(window.scrollY > 500) {
// 배지 숨기기
// badgeEl.style.display = 'none'; > 이렇게 하면 부자연스러워 보일 수 있어서 gsap.js 사용
// gsap.to(요소, 지속시간, 옵션)
// badgeEl 요소를 0.6초 동안 opacity : 0(점점 투명해지는) + display : none 애니메이션이 처리
gsap.to(badgeEl, .6, {
opacity : 0,
display : 'none'
});
// srollTo 버튼 보이기
gsap.to('#to-top', .2, {
x : 0
});
}else{
// 배지 보이기
// badgeEl.style.display = 'block';
// badgeEl 요소를 0.6초 동안 opacity : 1(점점 나타나는) + display : block 애니메이션이 처리
gsap.to(badgeEl, .6, {
opacity : 1,
display : 'block'
});
// srollTo 버튼 숨기기
gsap.to('#to-top', .2, {
x : 100
});
}
}, 300));
/**
* scrollTo 기능
*/
const toTopEl = document.querySelector('#to-top');
toTopEl.addEventListener('click', function () {
gsap.to(window, .7, {
scrollTo : 0 // 화면의 위치를 0px 지점으로 옮겨줌
});
});
출력