0Pricing
JavaScript Academy · Pelajaran

Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu

Bangun perulangan animasi kecil, gunakan pembaruan berbasis waktu (delta), simulasikan requestAnimationFrame, dan tambahkan easing sederhana

Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu adalah pelajaran JavaScript Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar JavaScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus JavaScript Academy mencakup 3 pelajaran total.

Mengapa animasi berbasis waktu?

Tujuan: Menggerakkan gerakan halus dengan pembaruan berbasis waktu.

  • Mensimulasikan requestAnimationFrame
  • Mengukur delta waktu
  • Bergerak dalam satuan per detik
  • Menambahkan sedikit pelandaian
Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 1

rAF simulasi

Tidak ada DOM di sini, jadi kami mensimulasikan requestAnimationFrame menggunakan setTimeout sekitar 16 milidetik.

// 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);
});
Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 2

Dasar-dasar delta waktu

Hitung delta waktu pada setiap bingkai: (now − last) / 1000. Ini menyesuaikan gerakan berdasarkan waktu sebenarnya.

// 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);
Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 3

Satuan per detik

Gunakan speed × dt untuk memperbarui posisi agar gerakan tetap konsisten pada berbagai laju bingkai.

// 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();
Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 4

Demo pelandaian kecil

Pelandaian membentuk kurva. Di sini easeOutQuad dimulai dengan cepat lalu melambat mendekati akhir.

// 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);
Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 5

Sekilas langkah tetap

Langkah tetap dapat menstabilkan logika; akumulator mengejar ketertinggalan jika sebuah bingkai terlambat.

// 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();
Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 6

Kuis delta dan langkah tetap

Pemeriksaan singkat: Mengapa menggunakan delta waktu?

Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 7

Ringkasan

Ringkasan: Anda mensimulasikan rAF dengan setTimeout, mengukur delta waktu, bergerak dalam satuan per detik, menambahkan pelandaian keluar, dan melihat sekilas langkah tetap dengan akumulator.

Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu — ilustrasi 8

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu” gratis?

Ya — teks lengkap “Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus JavaScript Academy, upgrade ke CoddyKit PRO. Kursus JavaScript Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu”?

Bangun perulangan animasi kecil, gunakan pembaruan berbasis waktu (delta), simulasikan requestAnimationFrame, dan tambahkan easing sederhana Kamu berlatih JavaScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai JavaScript Academy?

Tidak diperlukan pengalaman sebelumnya. JavaScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.

Berapa lama pelajaran “Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran JavaScript Academy ini?

Ya. Setiap pelajaran JavaScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. setTimeout, setInterval, dan Penyimpangan Pewaktu
  2. Debounce vs Throttle — Buatan Sendiri
  3. Pengaturan Waktu Animasi — Pengantar dengan Perulangan Berbasis Waktu
← Kembali ke JavaScript Academy