0Pricing
JavaScript Academy · Ders

Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş

Küçük bir animasyon döngüsü oluşturun, zamana dayalı (delta) güncellemeler kullanın, requestAnimationFrame'i benzetin ve basit bir yumuşatma ekleyin.

Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş, CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 3 dersten oluşur.

Neden zamana dayalı animasyon?

Amaç: Zamana dayalı güncellemelerle akıcı hareket oluşturmak.

  • requestAnimationFrame işlevini taklit etmek
  • Zaman farkını ölçmek
  • Saniye başına birimlerle hareket etmek
  • Küçük bir yumuşatma eklemek
Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 1

Benzetilmiş rAF

Burada DOM olmadığından, yaklaşık 16 ms aralıklarla setTimeout kullanarak requestAnimationFrame işlevini benzetiyoruz.

// 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);
});
Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 2

Zaman farkının temelleri

Her karede zaman farkını hesaplayın: (now − last) / 1000. Böylece hareket gerçek zamana göre ölçeklenir.

// 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);
Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 3

Saniye başına birim

Konumu güncellemek için speed × dt kullanın; böylece hareket kare hızları arasında tutarlı kalır.

// 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();
Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 4

Küçük bir yumuşatma gösterimi

Yumuşatma, eğrinin biçimini belirler. Burada easeOutQuad hızlı başlar ve sona yaklaştıkça yavaşlar.

// 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);
Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 5

Sabit adım yaklaşımı

Sabit adım mantığı kararlı hâle getirebilir; biriktirici, bir kare geciktiğinde açığı kapatır.

// 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();
Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 6

Zaman farkı ve sabit adım testi

Hızlı kontrol: Zaman farkı neden kullanılır?

Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 7

Özet

Özet: rAF işlevini setTimeout ile benzettiniz, zaman farkını ölçtünüz, saniye başına birimlerle hareket ettiniz, bir çıkış yumuşatması eklediniz ve biriktiriciyle sabit adım yaklaşımını gördünüz.

Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş — resim 8

Sıkça Sorulan Sorular

“Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş” dersi ücretsiz mi?

Evet — “Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 3 dersten oluşur.

“Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş” dersinde ne öğreneceğim?

Küçük bir animasyon döngüsü oluşturun, zamana dayalı (delta) güncellemeler kullanın, requestAnimationFrame'i benzetin ve basit bir yumuşatma ekleyin. JavaScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te JavaScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.

“Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her JavaScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. setTimeout, setInterval ve zamanlayıcı kayması
  2. Debounce ve Throttle — Elle Yazım
  3. Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş
← JavaScript Academy Sayfasına Dön