애니메이션 타이밍 — 시간 기반 반복문 입문
작은 애니메이션 반복문을 만들고, 시간 기반(delta) 업데이트를 사용하며, requestAnimationFrame을 흉내 내고 간단한 이징을 추가합니다.
애니메이션 타이밍 — 시간 기반 반복문 입문은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
시간 기반 애니메이션을 사용하는 이유
목표: 시간 기반 업데이트로 부드러운 움직임을 구현합니다.
- requestAnimationFrame 흉내 내기
- 델타 시간 측정
- 초당 단위로 이동
- 아주 작은 이징 추가

시뮬레이션한 rAF
여기에는 DOM이 없으므로 약 16밀리초 간격의 setTimeout을 사용해 requestAnimationFrame을 흉내 냅니다.
// requestFrame: simulate ~60 FPS with setTimeout
function requestFrame(fn) {
// ~16ms between frames for ~60fps
return setTimeout(function () { fn(Date.now()); }, 16);
}
function cancelFrame(id) {
clearTimeout(id);
}
// Tiny demo: schedule one frame
requestFrame(function (ts) {
console.log("frame at", ts);
});

델타 시간 기초
각 프레임에서 델타 시간을 계산합니다: (now − last) / 1000. 이렇게 하면 실제 시간에 따라 움직임의 크기가 조정됩니다.
// Time-based loop: compute delta time in seconds
let running = true;
let last = Date.now();
function loop() {
if (!running) { return; }
const now = Date.now();
const dt = (now - last) / 1000; // seconds
last = now;
// Print a tiny delta preview
console.log("dt", dt.toFixed(3), "s");
requestFrame(loop);
}
// Start the loop and stop after a few frames
loop();
setTimeout(function () {
running = false;
console.log("stop");
}, 60);

초당 단위
speed × dt를 사용해 위치를 업데이트하면 프레임 속도가 달라도 움직임이 일정하게 유지됩니다.
// Move with a speed in units/second
let x = 0; // position
const speed = 50; // units per second
let lastT = Date.now();
let frames = 0;
function moveLoop() {
const now = Date.now();
const dt = (now - lastT) / 1000;
lastT = now;
// Distance = speed * time
x = x + speed * dt;
frames = frames + 1;
console.log("x", Math.round(x));
if (frames < 5) {
requestFrame(moveLoop);
} else {
console.log("final x", Math.round(x));
}
}
moveLoop();

아주 작은 이징 예제
이징은 곡선의 형태를 정합니다. 여기서 easeOutQuad는 빠르게 시작한 뒤 끝부분에서 느려집니다.
// Ease from 0 to 1 over duration using easeOutQuad
function easeOutQuad(t) {
// t in [0,1]
return 1 - (1 - t) * (1 - t);
}
async function tween(durationMs) {
let start = Date.now();
let id = null;
function step() {
const now = Date.now();
const t = Math.min(1, (now - start) / durationMs);
const eased = easeOutQuad(t);
console.log("eased", eased.toFixed(2));
if (t < 1) {
id = requestFrame(step);
} else {
cancelFrame(id);
console.log("done");
}
}
step();
}
tween(60);

고정 단계 맛보기
고정 단계는 로직을 안정화할 수 있으며, 프레임이 늦어지면 누적기가 따라잡습니다.
// Fixed-step taste: step a physics tick and catch up using an accumulator
let acc = 0; // accumulated time
const step = 1 / 30; // 30 FPS fixed step in seconds
let lastTime = Date.now();
let value = 0;
let fixedFrames = 0;
function fixedLoop() {
const now = Date.now();
const dt = (now - lastTime) / 1000;
lastTime = now;
acc = acc + dt;
// Run zero or more fixed steps to catch up
while (acc >= step) {
// Update logic at a fixed rate
value = value + 1; // pretend physics
acc = acc - step;
}
console.log("value", value);
fixedFrames = fixedFrames + 1;
if (fixedFrames < 5) {
requestFrame(fixedLoop);
} else {
console.log("fixed stop");
}
}
fixedLoop();

델타와 고정 단계 퀴즈
빠른 확인: 델타 시간을 사용하는 이유입니다.

복습
복습: setTimeout으로 rAF를 시뮬레이션하고, 델타 시간을 측정했으며, 초당 단위로 이동하고 끝에서 감속하는 이징을 추가했습니다. 또한 누적기를 사용하는 고정 단계 방식도 살펴보았습니다.

자주 묻는 질문
“애니메이션 타이밍 — 시간 기반 반복문 입문” 강의는 무료인가요?
네 — “애니메이션 타이밍 — 시간 기반 반복문 입문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 JavaScript Academy 강의 전체를 잠금 해제할 수 있습니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“애니메이션 타이밍 — 시간 기반 반복문 입문”에서 뭘 배우나요?
작은 애니메이션 반복문을 만들고, 시간 기반(delta) 업데이트를 사용하며, requestAnimationFrame을 흉내 내고 간단한 이징을 추가합니다. 브라우저에서 직접 실행하는 실습 코드로 JavaScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
JavaScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 JavaScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.
“애니메이션 타이밍 — 시간 기반 반복문 입문” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 JavaScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 JavaScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- setTimeout, setInterval과 타이머 오차
- 디바운스와 스로틀 — 직접 구현하기
- 애니메이션 타이밍 — 시간 기반 반복문 입문