일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 코테
- Redux-Toolkit
- 정처기기출
- 프로그래머스 레벨0
- 프로그래머스코딩테스트
- 프로그래머스 Lv.0
- mysql
- CSS
- 코딩테스트
- 개발자
- 프로그래머스 알고리즘
- 프로그래머스알고리즘
- 코딩
- 코테스터디
- next.js 에러
- 프로그래머스 코딩테스트
- 프로그래머스코테
- 정보처리기사
- 알고리즘스터디
- js
- next.js
- 1일1코테
- html
- 코테준비
- 코테공부
- 자바스크립트
- 알고리즘공부
- 프로그래밍
- 알고리즘문제
- 프로그래머스
- Today
- Total
계발하는 개발자
[JS] 상단이동버튼 구현 - window.scrollTo() + 페이드인/아웃 본문
사이트들을 보면 꼭 있는 필수 기능인 상단이동버튼 구현에 관한 포스팅도 정리차 올려보려합니다.
Window.scrollTo()
Javascript는 Window.scrollTo()라는 메소드를 제공합니다.
해당 메소드는 Window 내에서 사용자가 원하는 위치로 스크롤을 이동시킬 수 있습니다.
// 기본 형태
window.scrollTo(x-좌표, y-좌표)
scrollTo의 인자로 behavior를 추가하면 모션 설정도 가능합니다.
참고로, smooth 모션 미추가시 이동버튼을 클릭하게되면 슝~하면서 이동하는 과정없이 화면이 깜빡이면서 바로 상단으로 이동하게 됩니다. 이 동작이 많이 부자연스럽기 때문에 smooth 모션도 꼭! 설정해주기 !
// behavior에는 auto와 smooth를 입력할 수 있다. (기본값은 auto)
window.scrollTo({
top: 0,
behavior: "smooth",
});
자세한 사항은 mdn 에 자세히 설명되어있습니다.
+ 다음은 상단이동시 버튼 숨기기/보이기 기능 구현에 대한 설명 추가
이전 프로젝트에서는 제이쿼리를 활용해서 구현했었는데, 금번 진행하는 프로젝트는 자바스크립트로 변경해서 진행해봤습니다.
// 상단이동시 숨기기/보이기
window.addEventListener("scroll", ()=>{
let scVal = window.scrollY;
if(scVal === 0) {
mTopBtn.style.opacity = 0;
mTopBtn.classList.add("active");
} else {
mTopBtn.style.opacity = 1;
mTopBtn.classList.remove("active");
}
});
위 기능을 구현하기 위해선 scroll value 값을 먼저 구해와야 합니다.
window.scrollTo({top: 0}) 으로 상단이동 구현을 완료했다면,
상단에 도달한 지점의 scrollY값은 0이 될겁니다. 제 경우 scrollY === 0 에 도달한 지점에서
상단이동버튼에 스타일 속성으로 opacity = 0 을 해줬습니다. 0 에 도달한 지점이 아니라면(즉, 맨 상단 도달 지점이 아닌 경우) opacity = 1 을 주면 버튼이 상단이동지점에 따라 숨겨졌다, 보였다 하는 효과를 줄 수 있습니다.
버튼에 트랜지션까지 적절히 주게되면 자연스럽게 흐려졌다 보였다 하겠죠?
active 클래스는 클릭 가능한 느낌을 덜고자 기존 cursor: pointer 속성이 적용된 버튼요소가 상단에 도달한 지점에 cursor: auto 로 변경해주었습니다.
'📌 Language > Javascript' 카테고리의 다른 글
[JS] JavaScript - 숫자 3자리마다 콤마(,) 넣는 방법 (0) | 2023.04.27 |
---|---|
[jQuery] is 메서드 - 선택한 요소의 일치여부 판별 (0) | 2023.04.26 |
[JS] form을 submit할 때 새로고침 방지하기 (0) | 2023.02.12 |
[JS] contains() 메소드 알아보기 | (feat. includes() 메소드 비교) (4) | 2023.02.11 |
[JS] length 프로퍼티 | 함수객체.length vs arguments.length (0) | 2023.02.08 |
dev_genie
@dev_genie
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!