2012-04-08 22 views
2

Ich verwende setTimeOut, um eine automatische Diashow zu steuern.Javascript auslösen setTimeOut Ereignisse vorzeitig

(Sie können es hier sehen: http://thingist.com/labs/ipad.shtml - im Grunde etwas hübsch anzusehen, während ich arbeite Bilder kommen von reddit API.)

Der Code etwa wie folgt aussieht:

next() { 
    image_url = images[key]["url"] 
    $("#image").html(vsprintf("<img src='%s'>", [image_url])); 
    key++; 
    setTimeOut(function() { next(); }, 30000); 

Das Problem ist, dass, wenn ich die "nächste" -Funktion auf andere Weise auslösen (zum Beispiel mit einem div onclick), die setTimeOut Callback-Funktion noch in der Warteschlange ist. Ich werde also ein Bild "weiter", aber wenn der Callback ausgelöst wird, wird als nächstes ein Bild angezeigt. Wenn Sie "nächste" viele Male in Folge, gibt es einen ca. 30 Sekunden verzögerten Burst, der Ihnen folgen wird. (Sobald alle Timeouts in der Warteschlange ausgelöst wurden).

Gibt es eine Möglichkeit, den Rückruf von setTimeOut vorzeitig auszulösen? Oder um es einfach aus der Welt zu schaffen?

+0

's/setTimeOut/setTimeout /' –

Antwort

3

Sie können clearTimeout() verwenden, um eine zuvor festgelegte Zeitüberschreitung zu löschen.

var timeout; 
function next() { 
    image_url = images[key]["url"] 
    $("#image").html(vsprintf("<img src='%s'>", [image_url])); 
    key++; 
    timeout = setTimeout(function() { next(); }, 30000); 
} 

// Clear the timeout by calling clearTimeout() 
window.clearTimeout(timeout); 
+0

Perfekt. Danke :) –

+0

@RyanMcDermott Mein Vergnügen! –

Verwandte Themen