过早触发javascript setTimeOut事件

时间:2012-04-08 17:10:22

标签: javascript jquery

我正在使用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);

问题在于,如果我以另一种方式触发“next”函数(例如使用div onclick),则setTimeOut回调函数仍会排队。所以我将“接下来”一个图像,但是当回调激发时,它“接下来”再次成像。如果您连续多次“下一次”,那么将会有大约30秒的延迟爆发。 (一旦排除所有排队的超时)。

有没有办法提前触发setTimeOut的回调?或者只是将它完全出列?

1 个答案:

答案 0 :(得分: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);