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

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);
});

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);

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();

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);

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();

Zaman farkı ve sabit adım testi
Hızlı kontrol: Zaman farkı neden kullanılır?

Ö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.

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
- setTimeout, setInterval ve zamanlayıcı kayması
- Debounce ve Throttle — Elle Yazım
- Animasyon Zamanlaması — Zamana Dayalı Döngülere Giriş