2011-10-07 8 views
18

Her slayt için slaytlardan ve varlıklardan oluşan küçük bir sunum yazılımı geliştirdim. Bir slayt oluşturulduğunda, tüm varlıklarının setTimeout yöntemini kullanarak bir gecikme sonrasında döngü ve işlenir. ... Yaaay !, şartlar değiştiYük setini başlangıçta ayarlanandan daha düşük bir değere yüklemesi için setTimeout

, sunum şimdi bir PowerPoint slayt gösterisi gibi davranmaya tatlı gereklidir görünüyor, fare tıklaması olay sonraki öğe anında sayfaya işlenecek neden olur.

Soruma; zaman aşımının hemen ateşlenmesine neden olacak bir yol var mı? Zaman aşımı oluşturulduğunda geri döndüğünden zaman aşımına uğramış bir yığında alıp saklayabilirim. Tek seçenek, zaman aşımını iptal etmek ve daha sonra çok daha fazla işlem yapmak istediğim öğeyi yeniden oluşturmak ve kodumu çok fazla yeniden kodlamak gibi hissetmiyorum.

Herhangi bir fikrin var mı?

cevap

14

Kısa cevap Sen görevden aldığı yöntemlerin bir listesini tutmak sürece, ne soruyorsun yapamaz sayılı olduğunu. Daha sonra zamanlayıcıyı iptal edebilir ve ilgili yöntemi tetikleyebilirsiniz.

19

böyle zamanlayıcı ayarlarsanız: bunu yaparak hemen

var timer1 = window.setTimeout(mainFunction,500) 

çağrıyı it:

window.clearTimeout(timer1) 
mainFunction() 

anahtar zamanlayıcı fonksiyonunu ayırmaktır.

+1

kaka, ben hızlı bir düzeltme için umuyordum, bunu yapmak zorunda düşündüm. 'MainFunction' zaman aşımı ilk ayarlandığında hesaplanan argümanları var, onlick olayında onları almak için bazı Refactoring yapmak gerekecek ... teşekkürler – lgados

+0

Daha fazla şey yönetmek zorunda kalmadan bir kapama sarma için aşağıdaki cevabımı bakın . TimeoutId öğesini bir .cancel() ve bir .trigger() yöntemiyle bir nesne ile değiştirir. – Killroy

16

Böyle bir kapatma bunu sarabilirdiniz:

function createTimeout(timeoutHandler, delay) { 
    var timeoutId; 
    timeoutId = setTimeout(timeoutHandler, delay); 
    return { 
     clear: function() { 
      clearTimeout(timeoutId); 
     }, 
     trigger: function() { 
      clearTimeout(timeoutId); 
      return timeoutHandler(); 
     } 
    }; 
} 

var a = new Date(); 

var timeout = createTimeout(function() { console.log(a); }, 1000); 
// timeout.clear(); 
timeout.trigger(); 
+1

zarif çözüm – JobaDiniz

İlgili konular