2010-04-12 19 views
7

Olası Çoğalt:
javascript: pause setTimeout();
Bir setTimeout çağrısı nasıl duraklatılır?

Im jQuery kullanarak ve sitemde için bir bildirim sistemi üzerinde çalışan. Bildirimler, setTimeout işlevini kullanarak otomatik olarak geri döner.

setTimeout çağrısının zamanlayıcısını nasıl durdurabilirim?

Örneğin ben

hiçbir şans ile "setTimeout pause" googled ... fare bildirim üzerindeyken setTimeout çağrısı durdurabilir ve mouseout geri sayım devam etmek istiyorum.

Şu anda setTimeout çağrısını clearTimeout ile temizliyorum ve aynı zamanda mouseout ile ilgili bildirimi yok sayıyorum ancak bu duraklatma etkisine sahip olmak güzel olurdu.

Herhangi bir fikrin var mı?

+2

D Yine de, fareyi bildirim bittiğinde zamanlayıcıyı sıfırlamak mantıklı değil mi? Yani, eğer zamanlayıcı 1 milisaniye sola duraklatılırsa, kullanıcı tekrar fare kapandıktan sonra bir süre kalmaz – Bob

+0

Peki tüm süreci açıklamamıştım, fakat mesajın süresine bağlı olarak zaman ekliyor. – Pablo

cevap

9

bu deneyin.

var myTimeOut; 
$(someElement).mouseout(function() { 
    myTimeOut = setTimeout("mytimeoutfunction()", 5000) 
}); 

$(someElement).mouseover(function() { 
    clearTimeout(myTimeOut); 
}); 
+0

Cevabınız için teşekkürler, bu çözümü daha çok beğeniyorum. Ayrıca, her şeyi temizlemek ve mesajı ortadan kaldırmak için bir tıklama etkinliği ekleyeceğim. – Pablo

+0

vay. SO ne zaman 'writemycodezforme' oldu? – fig

+5

İncir, Yazması kolay bir şeydi. Açıkçası bu Pablo tarafından anlaşıldı ve onu kullanabildi, değiştirebildi ve öğrendiğini uygulayabildi. –

6

Bir PausableTimeout sınıf eklemek için çok zor olmaz:

(geçerli JS olmasa gerek, ama çalışmıyor almayı daha da çok zor olmamalı):

function PausableTimeout(func, millisec) { 
     this.func = func; 
     this.stTime = new Date().valueOf(); 
     this.timeout = setTimeout(func, millisec); 
     this.timeLeft = millisec; 
    } 
    function PausableTimer_pause() { 
     clearTimeout(self.timeout); 
     var timeRan = new Date().valueOf()-this.stTime; 
     this.timeLeft -= timeRan; 
    } 
    function PausableTimer_unpause() { 
     this.timeout = setTimeout(this.func, this.timeLeft); 
     this.stTime = new Date().valueOf(); 
    } 
    PausableTimer.prototype.pause = PausableTimer_pause; 
    PausableTimer.prototype.unpause = PausableTimer_unpause; 

    //Usage: 
    myTimer = new PausableTimer(function(){alert("It works!");}, 2000); 
    myTimer.pause(); 
    myTimer.unpause(); 

Tabii ki, orada bazı hata kontrolleri eklemek çok iyi bir fikir olurdu (zaman aşımını birkaç kez duraklatmak ve yüzlerce zaman aşımına uğramak mümkün değil!), Ama buna izin vereceğim işin: P

İlgili konular