2016-04-03 7 views
0

Ich habe einige Javascipt (jQuery) in dem ich verbinde in #myDiv, wenn eine Schaltfläche geklickt wird, und dann wieder ausgeblendet nach 5 Sekunden mit einer Timeout-Funktion. Es funktioniert gut, aber wenn ein Benutzer erneut auf die Schaltfläche klickt, bevor die Funktion fadeOut innerhalb meiner Zeitüberschreitung ausgeführt wird, muss das Zeitlimit anhalten und im Wesentlichen neu beginnen.Abbrechen/Stoppen einer Timeout-Funktion

Ich denke, die Antwort wird sein, eine Funktion zuerst zu starten, um das Timeout zu löschen, obwohl ich das nicht funktionieren kann.

$('button').on('click', function() { 

    //need function here to stop the timeout if running 

    $("#myDiv").fadeIn(slow); 

    setTimeout(function(){ 
    $("#myDiv").fadeOut(slow); 
    }, 5000); 

}); 
+1

Blick auf diesen Beitrag Ihre Antwort zu finden. http://stackoverflow.com/questions/2578628/how-to-stop-override-a-jquery-timeout-funktion – theblindprophet

+0

danke für den Link - Ich habe viel Forschung und fand mehr als nur diesen Link, der mit dem Stoppen beschäftigt Das Timeout, aber ich konnte nicht herausfinden, wie das Timeout nach dem Speichern in der Variablen tatsächlich ausgeführt wird. Daher habe ich diese Frage in der Hoffnung gestellt, eine vollständige Lösung zu finden, dh wie Timeout als Variable gespeichert und Timeout ausgeführt wird – scmccarthy22

Antwort

3

Sie müssen das Timeout deaktivieren, wenn bereits festgelegt ist:

var to = null; 
$('button').on('click', function() { 

    if(to){ 
    clearTimeout(to); 
    } 
    //need function here to stop the timeout if running 

    $("#myDiv").fadeIn(slow); 

    to = setTimeout(function(){ 
    $("#myDiv").fadeOut(slow); 
    }, 5000); 

}); 

Die clearTimeout() Funktion den Timeout löschen, damit, wenn der Benutzer klicken Sie zweimal auf die Schaltfläche das erste Timeout gelöscht und nur die zweite Instanz ausgeführt werden.

1

Sie können dies allein in jQuery API-Methoden gebaut haben werden:

$('button').on('click', function() { 
    $("#myDiv") 
     .stop(true,true) // resets current animation queue 
     .fadeIn('slow') 
     .delay(5000)// delays anything in queue 
     .fadeOut('slow'); 
}); 

Dinge macht ein bisschen leichter

Referenzen zu lesen:

DEMO

Verwandte Themen