2010-04-12 10 views
7

Mögliche Duplizieren:
javascript: pause setTimeout();Wie pausiere ich einen setTimeout-Anruf?

Im mit jQuery und arbeitet an einem Benachrichtigungssystem für meine Website. Die Benachrichtigungen werden mit der Funktion setTimeout automatisch ausgeblendet.

Wie kann ich den Timer des setTimeout-Aufrufs stoppen?

Zum Beispiel würde Ich mag den setTimeout Anruf zu unterbrechen, während die Maus über die Benachrichtigung ist und weiterhin die mouseout count down ...

Ich googeln „Pause SetTimeout“ ohne Glück.

Ich lösche gerade den setTimeout-Aufruf mit clearTimeout und zur gleichen Zeit die Benachrichtigung bei Mouseout ausgeblendet, aber es wäre schön, diese Pause-Effekt zu haben.

Irgendwelche Ideen?

+2

D Ist es aber nicht sinnvoll, den Timer zurückzusetzen, wenn die Maus über der Benachrichtigung ist? Ich meine, wenn der Timer auf 1 Millisekunde links pausiert ist, dann wird der Benutzer keine Zeit übrig haben, nachdem sie wieder ausgezogen sind. – Bob

+0

Nun, ich habe den ganzen Prozess nicht erklärt, aber es fügt Zeit hinzu, abhängig von der Länge der Nachricht. – Pablo

Antwort

9

bereits.

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

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

Danke für die Antwort, ich mag diese Lösung besser. Ich füge auch ein Klick-Ereignis hinzu, um alles zu löschen und die Nachricht ebenfalls auszublenden. – Pablo

+0

wow. Wann wurde SO zur "Schreib-Code-Formel"? – fig

+5

Fig, Es war eine leichte Sache zu schreiben. Dies wurde von Pablo klar verstanden und er konnte es anwenden, modifizieren und anwenden, was er gelernt hatte. –

6

Es wäre nicht allzu schwer sein, eine PausableTimeout Klasse hinzuzufügen:

(Könnte nicht gültig JS sein, aber es sollte es nicht allzu schwer sein, sich in Betrieb):

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

Natürlich wäre es eine gute Idee, eine Fehlerüberprüfung hinzuzufügen (es soll nicht möglich sein, die Zeitüberschreitung mehrere Male zu wiederholen und mit hunderten von Timeouts zu enden!), Aber das lasse ich zu sei dein Job: P

Verwandte Themen