我正在使用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的回调?或者只是将它完全出列?
答案 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);