it-swarm.com.de

Wie kann ich eine Jquery TimeOut-Funktion stoppen/überschreiben?

Ich habe ein kleines JQuery-Snippet, das als Reaktion auf Benutzeraktionen auf einer Seite oben auf dem Bildschirm eine Benachrichtigung anzeigt. Die Benachrichtigung wird häufig nach Ajax-Aktionen mit dynamischem Inhalt angezeigt.

Zum Beispiel:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast");
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000);

Die Benachrichtigung funktioniert einwandfrei, außer wenn ein Benutzer zwei oder mehr Aktionen schnell hintereinander ausführt. In diesem Fall verwirrt sich die TimeOut-Funktion und die zweite Meldung scheint innerhalb der vorherigen 3000 Millisekunden zu erscheinen.

Gibt es eine Möglichkeit, die vorherige Benachrichtigung zu "beenden", wenn eine neue Aktion ausgeführt wird? Ich habe kein Problem mit den Aktionen/Selektoren, nur mit der TimeOut-Funktion ... entweder stoppen oder irgendwie überschreiben. Oder gibt es vielleicht eine bessere Alternative, um die Nachricht für ein paar Sekunden auf dem Bildschirm zu verweilen, bevor sie verschwindet?

Vielen Dank.

27
Tom

Zuerst speichern Sie den Rückgabewert für die Funktion setTimeout:

// Set the timeout
var timeout = setTimeout(function()
    {
        // Your function here
    }, 2000);

Wenn Sie dann bereit sind, das Timeout zu beenden, rufen Sie einfach clearTimeout mit dem gespeicherten Wert des vorherigen Aufrufs in setTimeout auf.

// Then clearn the timeout
clearTimeout(timeout);
58
Justin Niessner

Sie können.stop ()verwenden.

Stoppen Sie die aktuell laufende Animation Für die übereinstimmenden Elemente.

6
rahul

jQuery 1.4 verfügt über eine integrierte Methode, um Verzögerungen für Animationen zu behandeln, die Sie wie folgt ausführen können:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium");

Wenn Sie später die Animationswarteschlange bereinigen möchten, können Sie Folgendes tun:

$("#mini").stop(true);
6
PetersenDidIt

Dadurch wird das Zeitlimit gelöscht, nachdem die Funktion mit einer Verzögerung von 500 ms ausgeführt wurde

var timeout = setTimeout(function(){

/* YOUR FUNCTION */

}, 500, function(){
   clearTimeout(timeout);
});
0