2

我正在使用 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 的回调?还是完全出队?

4

1 回答 1

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);
于 2012-04-08T17:12:49.110 回答