728x90
반응형
requestAnimationFrame()은 브라우저가 다음 화면을 그리기 직전에 실행할 콜백을 예약하는 함수입니다.
주로 애니메이션 처리나 렌더링 타이밍을 정확하게 맞추고 싶을 때 사용합니다.
✅ 기본 사용법
js
requestAnimationFrame(() => {
// 브라우저가 다음 repaint 전에 실행할 코드
// DOM이 렌더링된 이후에 안전하게 실행됨
});
🧠 개념 요약
항목 | 설명 |
실행 시점 | 브라우저가 다음 프레임을 그리기 직전 |
호출 빈도 | 일반적으로 초당 60회 (60fps) |
주 목적 | 부드러운 애니메이션 / 렌더링 이후 DOM 조작 |
이점 | setTimeout보다 부드럽고 효율적이며, 렌더링 타이밍 보장 |
🎯 언제 사용하나?
- DOM 변경 직후 후속 처리
- 예: innerHTML 또는 .append() 후 특정 요소에 focus, scroll, resize 등 적용하려 할 때.
jselement.innerHTML = '<input id="myInput" />'; requestAnimationFrame(() => { document.getElementById('myInput').focus(); });
- 애니메이션 구현
js
function moveBox(timestamp) {
box.style.left = `${timestamp / 10}px`;
requestAnimationFrame(moveBox);
}
requestAnimationFrame(moveBox);
3.복잡한 계산 또는 레이아웃 조정이 필요한 작업을 defer
requestAnimationFrame(() => {
heavyLayoutCalculation();
});
❗ setTimeout vs requestAnimationFrame
항목 | setTimeout(fn, 0) | requestAnimationFrame(fn) |
타이밍 | 이벤트 큐 뒤 (불확실한 시점) | 다음 repaint 직전 |
성능 | 일정치 않음 | 최적화된 방식 |
목적 | 비동기 처리 | 렌더링과 시각적 작업 최적화 |
단점 | UI 깜빡임 가능 | 애니메이션 외 목적에는 적합하지 않을 수 있음 |
728x90
반응형
'Front > JS & jQuery' 카테고리의 다른 글
[js] requestAnimationFrame() (0) | 2025.06.19 |
---|---|
[js] 구조분해할당 기본값 설정 (0) | 2025.06.14 |
[js] 객체의 구조 분해 할당 (0) | 2025.06.13 |
[js] 배열의 구조 분해 할당 (0) | 2025.06.12 |
[jQuery][multiselect] 기존 멀티셀렉트 완전 초기화 (0) | 2025.06.01 |