2011-12-29 19 views
17

Belirli bir noktaya ulaştığında, zamanlayıcı sıfırlanır ve ardından yeniden başlatan bir zamanlayıcı oluşturmak istiyorum.javascript zamanlayıcı döngüsü

Şu anda, döngüyü kurdum ve bir test olarak 5000 ms (5 saniye) sonra sıfırlanmasını istiyorum. Ama sayaç tüm samanlıklara gider. Burada

WIP Demosu: http://jsfiddle.net/stursby/wUHA3/ yerine setTimeout ait

+1

Ben demo tıklamadan önce, benim tarayıcı çökecek var? ': P' –

+0

Sayaç, Firefox'ta sıfırlanıyor ... –

+0

haha ​​no, sonsuz bir döngü değil. Bir yayının metnini geçerli zamanlayıcı değerine göre güncelliyorum ... bu yüzden berbat olan tek şey, göreceksiniz. – stursby

cevap

43

, setInterval kullanmayı düşünün. Aralığı temizleyene kadar otomatik olarak tekrarlanacaktır.

setInterval(myMethod, 5000); 

function myMethod() 
{ 
    //this will repeat every 5 seconds 
    //you can reset counter here 
} 
+1

Sadece anlattığım sorunun sebebinin' var diff = (yeni Tarih(). getTime() - başlangıç) sebebi olduğuna inanıyorum. - zaman; 'bu hatta gerek yoktur. Window.setTimeout (örnek, (100 - fark)) yerine 'window.setTimeout (örnek, 100);' olmalıdır. Ve sorunu çözüldü. – Chad

+0

Bunu bir yanıt olarak gönderebilirsiniz, çünkü bu sadece geçerli. OP, bu yöntemin genel programına uygun olup olmayacağına karar verebilir. SetInterval genellikle böyle bir durumda mantıklıyken, kodunuz sorunu doğrudan giderir. – keyboardP

+0

İyi fikir, yayınlandı. – Chad

5

Ben muhtemelen setInterval yerine setTimeout kullanarak gerektiğini keyboardP katılıyorum. Ancak, orijinal sorunuzu cevaplamak için, zamanlayıcı ile ilgili sorunlarınızın nedeni tekrarlama mantığınız içindir. kullanmayın: Sen denemek ve (Sana diff ile yapmaya çalışıyor ne olduğunu varsayalım) yürütme kez hesap gerekmez

var diff = (new Date().getTime() - start) - time; 
window.setTimeout(instance, (100 - diff)); 

.

setTimeout(instance, 100); 

Ve this jsFiddle de görebileceğiniz gibi Sorununuz, çözülene: Sadece önemsiz ve kullanımı olduğunu varsayalım.

+0

+1 OP'nin orijinal kodunu düzeltmek için (sürpriz yok: D). – keyboardP

+0

, bunun 100'lerin yerine 1'ler için artmasının kolay bir yolu var mı? Örneğin, 2,1 saniye 2100, 2.154 saniye veya zamanlayıcıda 2154 gibi daha fazla ondalık almanın bir yolu var mı? – stursby

+0

iyi doğruluk milisaniye kesin olmayacaktır. Tarayıcılar zaman aşımlarını/aralıklarını farklı değerlendirir. Ortalama olarak her 13 ms'de bir zaman aşımı değerlendirilir. Bu, tarayıcınıza bağlı olarak alabileceğiniz kadar spesifik. – Chad