2012-04-08 40 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