티스토리 뷰
안녕하세요 찐망고입니다.
웹사이트에서 페이지가 길어질 때 나오는 top버튼
top버튼을 누르면 자연스럽게 페이지위로 올라가는 애니메이션을 적용해 볼까 합니다.
제이쿼리에는 animate()라는 메서드가 내장되어 있지만
javascript에서는 존재하지 않으므로 스크롤 애니메이션을 구현하기 위해
requestAnimationFrame()을 사용하여 스크롤 위치를 변경할 겁니다.
호반문화재단
Creating culture, connecting hearts.
www.hobancf.or.kr
예시 사이트인데요
푸터에서 top버튼을 누르면 자연스럽게 상단으로 넘어가죠?
스크립트 코드입니다.
const topBtn = document.querySelector('.topBtn');
topBtn.addEventListener("click", function() {
const scrollToTop = () => {
// window.scrollY: 현재 스크롤 위치를 가져옵니다.
const currentPosition = window.scrollY;
// (currentPosition > 0) 현재 스크롤 위치가 0보다 크면 아래 코드를 실행
// 페이지가 상단이 아닌 경우에만 스크롤을 조정
if (currentPosition > 0) {
// scrollTo(0, currentPosition - 50)
// 첫 번째 인수는 가로 스크롤 위치이고, 두 번째 인수는 세로 스크롤 위치
window.scrollTo(0, currentPosition - 50);
requestAnimationFrame(scrollToTop);
}
}
scrollToTop();
})
requestAnimationFrame() 함수는
브라우저에게 다음 애니메이션 프레임을 실행하기 전에 애니메이션을 업데이트하라고 요청하는 메서드입니다.
이 함수는 주로 웹 애니메이션을 부드럽게 실행하는 데 사용되는데
애니메이션을 생성하려면 브라우저가 화면을 다시 그릴 준비가 되었을 때
애니메이션 프레임을 업데이트해야 합니다.
이때 requestAnimationFrame()을 사용하면 브라우저가 다음 프레임을 그리기 전에
콜백 함수를 실행할 수 있습니다.
requestAnimationFrame() 메서드는 콜백 함수를 매개변수로 사용하며,
이 콜백 함수는 다음 프레임을 그리기 전에 실행됩니다.
따라서 애니메이션의 각 프레임에서 콜백 함수가 호출되어 새로운 프레임을 그릴 준비를 할 수 있습니다.
이를 통해 애니메이션을 브라우저가 처리하는 방식과 동기화하여 부드러운 애니메이션 효과를 얻을 수 있습니다.
See the Pen requestAnimationFrame by 찐망고 (@nnwbliyz-the-styleful) on CodePen.
'WEB > JS코드' 카테고리의 다른 글
JavaScript로 클릭한 메뉴 항목에만 클래스 추가하기 (0) | 2024.05.28 |
---|---|
자바스크립트 부드러운 top버튼 스크롤 이벤트 (2) | 2024.03.25 |
자바스크립트 tab만들기 (0) | 2024.03.19 |
css와 js를 이용한 자동 롤링 슬라이드 배너 (2) | 2024.03.05 |
jQuery.marquee 텍스트 자동 롤링 (0) | 2024.03.04 |
- Total
- Today
- Yesterday
- 슬라이드플러그인
- boxmodel
- 피그마플러그인
- slickAPI
- padding
- 포토샵합성
- uiux
- JavaScriptTips
- 디자인팁
- UI디자인
- Slick
- css
- uxdesign
- 크로스브라우징
- 시멘틱마크업
- 자바스크립트숫자카운트
- 스마트폰해상도
- 코딩교육
- Border
- margin
- JavaScript
- uidesign
- css4
- CSS3
- 웹디자인
- 웹접근성
- css그리드
- 웹표준
- 반응형웹
- 프로그래밍기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |