애니메이션은 사용자 경험을 향상시키는 데에 매우 유용한 요소입니다. 자바스크립트를 사용하여 웹 페이지에 애니메이션을 만드는 방법은 여러 가지가 있지만, requestAnimationFrame을 사용하는 것이 가장 효율적입니다. requestAnimationFrame은 웹 브라우저의 리페인트 주기에 맞춰 애니메이션을 업데이트할 수 있는 API입니다.
requestAnimationFrame 개요
requestAnimationFrame은 웹 브라우저가 화면을 갱신하기 전에 호출할 함수를 등록하는 역할을 합니다. 이 함수는 브라우저의 리페인트 주기에 맞춰 호출되므로, 애니메이션을 부드럽게 업데이트할 수 있습니다. 또한, 애니메이션 재생 중에 사용자가 다른 탭으로 이동하거나 페이지를 숨겼을 때, requestAnimationFrame은 자동으로 일시 중지되어 불필요한 계산 자원을 아낄 수 있습니다.
requestAnimationFrame을 사용한 애니메이션 만들기
다음은 자바스크립트를 사용하여 requestAnimationFrame을 활용한 간단한 애니메이션 예시입니다. 이 예시는 화면에 원을 그려 움직이는 애니메이션을 구현합니다.
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
let posX = 0;
const velocity = 2;
function drawCircle(x) {
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.arc(x, canvas.height / 2, 50, 0, 2 * Math.PI);
context.fillStyle = 'blue';
context.fill();
context.closePath();
}
function animate() {
posX += velocity;
if (posX > canvas.width) {
posX = 0;
}
drawCircle(posX);
requestAnimationFrame(animate);
}
animate();
이 코드에서는 canvas
엘리먼트를 사용하여 애니메이션을 렌더링합니다. drawCircle
함수는 매 프레임마다 원을 그리는 역할을 하며, animate
함수는 프레임마다 호출되어 원의 위치를 업데이트하고 다시 그립니다. requestAnimationFrame(animate)
은 다음 프레임이 그려지기 전에 animate
함수를 호출하도록 스케줄링합니다.
이 예시를 실행하면 웹 페이지에 움직이는 원이 그려지는 애니메이션을 확인할 수 있습니다.
마무리
requestAnimationFrame을 활용하여 자바스크립트 애니메이션을 만들면 부드럽고 효율적으로 애니메이션을 제어할 수 있습니다. 이를 통해 웹 페이지의 사용자 경험을 향상시킬 수 있습니다. 자바스크립트로 애니메이션을 구현하는 경우 requestAnimationFrame을 사용하는 것을 권장합니다.
References: