0Pricing
JavaScript Academy · 강의

애니메이션 타이밍 — 시간 기반 반복문 입문

작은 애니메이션 반복문을 만들고, 시간 기반(delta) 업데이트를 사용하며, requestAnimationFrame을 흉내 내고 간단한 이징을 추가합니다.

애니메이션 타이밍 — 시간 기반 반복문 입문은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

시간 기반 애니메이션을 사용하는 이유

목표: 시간 기반 업데이트로 부드러운 움직임을 구현합니다.

  • requestAnimationFrame 흉내 내기
  • 델타 시간 측정
  • 초당 단위로 이동
  • 아주 작은 이징 추가
애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 1

시뮬레이션한 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);
});
애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 2

델타 시간 기초

각 프레임에서 델타 시간을 계산합니다: (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);
애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 3

초당 단위

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();
애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 4

아주 작은 이징 예제

이징은 곡선의 형태를 정합니다. 여기서 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);
애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 5

고정 단계 맛보기

고정 단계는 로직을 안정화할 수 있으며, 프레임이 늦어지면 누적기가 따라잡습니다.

// 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();
애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 6

델타와 고정 단계 퀴즈

빠른 확인: 델타 시간을 사용하는 이유입니다.

애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 7

복습

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

애니메이션 타이밍 — 시간 기반 반복문 입문 — 일러스트레이션 8

자주 묻는 질문

“애니메이션 타이밍 — 시간 기반 반복문 입문” 강의는 무료인가요?

네 — “애니메이션 타이밍 — 시간 기반 반복문 입문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. setTimeout, setInterval과 타이머 오차
  2. 디바운스와 스로틀 — 직접 구현하기
  3. 애니메이션 타이밍 — 시간 기반 반복문 입문
← JavaScript Academy(으)로 돌아가기