Javascript 在无clearInterval的setInterval上重置计时器

Javascript 在无clearInterval的setInterval上重置计时器,javascript,Javascript,我有一个简单的幻灯片,每5秒使用setInterval自动更改图像 用户还可以使用上一个和下一个链接从一个图像移动到另一个图像 如果用户单击上一个/下一个链接,则计时器不会中断,因此,例如,如果用户单击链接时计时器处于3秒状态,则下一个图像在再次更改之前仅显示2秒 我知道我可以通过使用clearInterval,然后再次使用setInterval来做到这一点,但是有更干净的方法吗 如果您需要,这是我的代码: //Move to next image every 10 seconds unless

我有一个简单的幻灯片,每5秒使用setInterval自动更改图像

用户还可以使用上一个和下一个链接从一个图像移动到另一个图像

如果用户单击上一个/下一个链接,则计时器不会中断,因此,例如,如果用户单击链接时计时器处于3秒状态,则下一个图像在再次更改之前仅显示2秒

我知道我可以通过使用clearInterval,然后再次使用setInterval来做到这一点,但是有更干净的方法吗

如果您需要,这是我的代码:

//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
调用之后执行(抱歉,在完成回调中错过了该调用)。如果你这样做了,每五秒钟就会在任何浏览器定时器的分辨率范围内。但是,你必须处理更高层次的情况,动画仍然在发生,这可能会反对这种方法。。。玩得高兴