2012-04-08 41 views
2

我使用setTimeOut來控制自動幻燈片。過早觸發javascript setTimeOut事件

(你可以在這裏看到:http://thingist.com/labs/ipad.shtml - 基本漂亮的東西來看待,而我的工作映像從reddit的的API來了。)

代碼看起來大約是這樣的:

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

問題是,如果我以另一種方式觸發「下一個」功能(例如使用div onclick),setTimeOut回調函數仍然排隊。所以我會「下一張」一張圖片,但是當回調激發時,它會再次成爲下一張圖片。如果連續多次「下一次」,則會有大約30秒的延遲爆發,會跟着你。 (一旦所有的排隊超時被觸發)。

有沒有辦法過早地觸發setTimeOut的回調?或者完全將其解除?

+0

's/setTimeOut/setTimeout /' – 2012-04-08 17:11:54

回答

3

您可以使用clearTimeout()清除先前設置的超時。

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

完美。謝謝:) – 2012-04-08 17:51:21

+0

@RyanMcDermott我的榮幸! – 2012-04-08 17:53:38