Javascript 在无clearInterval的setInterval上重置计时器
我有一个简单的幻灯片,每5秒使用setInterval自动更改图像 用户还可以使用上一个和下一个链接从一个图像移动到另一个图像 如果用户单击上一个/下一个链接,则计时器不会中断,因此,例如,如果用户单击链接时计时器处于3秒状态,则下一个图像在再次更改之前仅显示2秒 我知道我可以通过使用clearInterval,然后再次使用setInterval来做到这一点,但是有更干净的方法吗 如果您需要,这是我的代码:Javascript 在无clearInterval的setInterval上重置计时器,javascript,Javascript,我有一个简单的幻灯片,每5秒使用setInterval自动更改图像 用户还可以使用上一个和下一个链接从一个图像移动到另一个图像 如果用户单击上一个/下一个链接,则计时器不会中断,因此,例如,如果用户单击链接时计时器处于3秒状态,则下一个图像在再次更改之前仅显示2秒 我知道我可以通过使用clearInterval,然后再次使用setInterval来做到这一点,但是有更干净的方法吗 如果您需要,这是我的代码: //Move to next image every 10 seconds unless
//Move to next image every 10 seconds unless paused.
var timeInterval = 5000;
var featureSlide = window.setInterval(function() { nextFeature("next")}, timeInterval);
$("a#feature-prev").click( function () {
nextFeature("prev");
return false;
});
$("a#feature-next").click( function () {
nextFeature("next");
return false;
});
function nextFeature(action) {
var idNow = $("ul#features li:visible").attr("id");
var pos = idNow.replace("feature-", "");
//If image is currently animated do nothing
//If this isn't in place then multiple images are displayed
if ($("li#" + idNow).is(":animated")) {
return;
} else {
if (pos == 4 && action == "next") {
pos = 1;
} else if (pos != 4 && action == "next") {
pos++;
} else if (pos !=1 && action == "prev") {
pos--;
} else if (pos == 1 && action == "prev") {
pos = 4
}
pos = "feature-" + pos;
// Slide to next image
$("li#" + idNow).hide("slide", { direction: "right" }, 1000, function () {
$("li#" + pos).show("slide", { direction: "left"}, 1000);
});
}
}
谢谢 如果不取消并重新启动计时器,则无法重新启动计时器
或者,您可以完全停止使用
setInterval
,只需使用setTimeout
。每当显示图像时,请安排下一个(如果我正确阅读了您的代码,请在nextFeature
中的show
之后)。然后,间隔重置作为逻辑流的副产品发生,而不是一件特殊的事情。谢谢。我想我会坚持使用setInterval,因为除非用户单击上一个/下一个链接,否则需要每5秒调用一次相同的函数。我将添加clearInterval,然后在下一个功能开始时再次使用setInterval重新启动计时器。@Phil:酷。顺便说一句,看起来我有点误读了你的代码。如果您使用setTimeout
方法,那么您希望在hide
调用之后执行,而不是show
调用之后执行(抱歉,在完成回调中错过了该调用)。如果你这样做了,每五秒钟就会在任何浏览器定时器的分辨率范围内。但是,你必须处理更高层次的情况,动画仍然在发生,这可能会反对这种方法。。。玩得高兴