window.requestAnimationFrame()
은 브라우저에게 수행하기를 원하는 애니메이션을 알리고 다음 리페인트가 진행되기 전에 해당 애니메이션을 업데이트하는 함수를 호출하게 합니다.
- 리페인트 이전에 실행할 콜백을 인자로 받고 id를 리턴
- 다음 리페인트에서 그 다음 프레임을 애니메이트하려면 콜백 루틴이 반드시 스스로
requestAnimationFrame()
을 호출해야합니다.
- 60fps 각 프레임에는 16ms 가량의 시간만 할당됩니다(1초/60 = 16.66ms).
- 화면에 새로운 애니메이션을 업데이트할 준비가 될때마다 이 메소드를 호출하는것이 좋습니다.
- 이는 브라우저가 다음 리페인트를 수행하기전에 호출된 애니메이션 함수를 요청합니다. 콜백의 수는 보통 1초에 60회지만, 일반적으로 대부분의 브라우저에서는 W3C 권장사항에 따라 그 수가 디스플레이 주사율과 일치하게됩니다.
- vsync로 인해 요청된 콜백 함수가 그 다음 리페인트 전으로 밀리기도 한다
- 대부분의 최신 브라우저에서는 성능과 배터리 수명 향상을 위해
requestAnimationFrame()
호출은 백그라운드 탭이나 hidden <iframe>에서 실행이 중단
취소
window.cancelAnimationFrame()
setTimeout 보다 좋은점
- setTimeout은 프레임 중간에 렌더가 실행되서 버벅임이 발생 할 수 있지만
- rAF는 항상 다음 프레임 렌더 직전 (
JS반영 직전
)에 실행 되기 때문에 프레임이 버벅임 없이 실행이 보장된다
https://codepen.io/chriscoyier/pen/ltseg