requestAnimationFrame은
브라우저의 애니메이션 루프에 최적화된 방식으로 작업을 실행하기 위해 사용
애니메이션이나 화면에서 자주 업데이트해야 하는 요소들을 더 효율적으로 처리할 수 있게 도와줌
주요 특징 및 사용법
- 프레임 동기화: requestAnimationFrame은 브라우저의 디스플레이 주기와 동기화하여 콜백 함수를 실행함
이는 보통 60fps(초당 60프레임)를 목표로 하며, 모니터의 주사율에 따라 조정됨 - CPU 효율성: setInterval이나 setTimeout과는 달리 비활성 탭에서는 실행이 멈춤,
따라서 리소스를 아낌 - 콜백 전달: requestAnimationFrame은 콜백 함수를 매개변수로 받음.
이 콜백은 애니메이션 프레임이 준비될 때마다 실행됨.
기본 사용 예제
function animate() {
// 애니메이션 프레임마다 실행될 코드 작성
console.log("Animating...");
// 다음 프레임 요청
requestAnimationFrame(animate);
}
// 첫 번째 프레임 시작
requestAnimationFrame(animate);
위 코드에서는 animate 함수가 매 프레임마다 실행되도록 함
animate 함수 내에서 요소의 위치, 크기 등을 업데이트하면 부드러운 애니메이션을 만들 수 있다!!
실전 예제: 스무스한 박스 이동
const box = document.querySelector(".box");
let pos = 0;
function moveBox() {
pos += 1;
box.style.transform = `translateX(${pos}px)`;
if (pos < 300) {
requestAnimationFrame(moveBox); // 목표 위치까지 이동
}
}
// 첫 번째 프레임 요청
requestAnimationFrame(moveBox);
이 예제에서는 .box라는 요소가 300px까지 오른쪽으로 부드럽게 이동함
일정한 시간차를 두는 비슷한 함수로는 위에서 말했듯 setInterval이 있다
그렇다면 마지막으로 이 둘의 차이는 무엇인지 알아보고 글을 마무리 하겠다!
requestAnimationFrame vs setInterval
- requestAnimationFrame은 애니메이션 루프에 최적화되어, 부드럽고 안정적인 화면 업데이트가 가능
- 비활성 탭에서는 중단되어 리소스 절약이 가능
- setInterval은 지정된 간격에 따라 무조건 실행되며,
화면의 프레임 주기와 맞지 않아 부자연스러운 애니메이션이 될 수 있음!
따라서 웹 애니메이션을 다룰 때는 requestAnimationFrame을 사용하는 것이 일반적인 권장 사항임..!
console.log를 함수 내에 찍어보면 엄청난 로그들이 찍히는걸 볼 수 있다!
728x90
반응형
'JS' 카테고리의 다른 글
[JS] DOCUMENT 객체와 관련된 다양한 기능과 이벤트 (1) | 2024.11.18 |
---|---|
[JS] 웹의 모든 이미지 한번에 없애 버리기 (1) | 2024.11.15 |
[JS] alert 메세지 띄우고 false 시키기 (4) | 2024.10.08 |
[JS] 이미지 로딩 지연 방지하기(Image Preload) (5) | 2024.10.04 |
캐시 버전명을 혁명적으로 변경해서 웹로딩 빠르게하기! (0) | 2024.09.09 |