Bir acemi soru, ama değil aptal bir soru; Üzgünüm, yukarıda böyle iğrenç yorumlar yapıyorsun. Bu örnekteki setInterval aralığı tanımlar sadece 5 değil 5000
neden
anlamıyorum ne kadar zaman kodu tekrar çalıştırmadan önce bekleyeceği milisaniye cinsinden - 5000 milisaniyelik bir aralık olur Her beş saniyede bir hareket etmesine sebep olur. 5'lik bir aralık, her 5 saniyede bir ya da saniyede 200 kez (teorik olarak) çalışmasına neden olur. Ama artık
yaptığı gibi animasyon neredeyse ... Her çalışma geçer dahilinde işlem süresi aynı süreyi alır ... aşağıda
Ben ondalık için aşağı düşürmek her zaman görebilirsiniz dikkate alınmaz; setInterval sadece geçişler arasındaki gecikme miktarını kontrol eder. Bu yüzden burada sahip olduğunuz çok küçük bir aralık muhtemelen her koşuyu yapmak için harcanan zamana göre boğulmuş olacak; Belirli bir noktanın altında (kullanıcının işlemci hızına bağlı olacaktır) daha kısa aralıklar kodunuzun daha hızlı çalışmasına neden olmaz.
Animasyonun daha hızlı çalışmasını istiyorsanız, daha fazla döngüyü çalıştırmaya çalışmak yerine, nesneyi döngü başına daha fazla taşımanız gerekir. - yerine döngü başına madde 1 piksel hareket nedeniyle, hızını iki katına o döngü başına 2 piksel hareket edeceğiz
function frame() {
if (pos > 349) { // <-- here
clearInterval(id);
} else {
pos = pos + 2; // <-- and here
elem.style.top = pos + 'px';
elem.style.left = pos + 'px';
}
}
ikinci değişiklik yeterince açıktır: kodunuzu iki değişiklik iyiyerin gerektirir.
birincisi sonsuz döngüler önlenmesidir: Eğer pos
daha büyük artışlar ekliyoruz beri yerine pos
büyüktür 349.
olup olmadığını görmek için kontrol ederek potansiyel sonsuz döngüler kaçınmak gerekir bu yüzden, sağ geçmiş 350 atlamak olabilir
5ms. Neden 5'ler olsun? –
Eğer '5000' için ayarlarsanız ne olacağını düşünüyorsunuz? Bunu deneyebilirsin, biliyor musun? – Xufox
'5ms' yaklaşık 200 fps'dir. Neden daha hızlı gitmesini bekliyorsun? Pürüzsüz animasyonlar için 'requestAnimationFrame' ve delta zamanlaması kullanıyor olmalısınız ... –