在clearInterval之后从头开始重新启动

时间:2012-01-11 00:11:20

标签: javascript jquery

link to test site

我想在最后一张图片停止后从头开始重新启动动画。我尝试了下面的代码,但它不会返回到第一张图片。

$(document).ready(function () {
    window.setInterval("slideshow()", 3000);
});

function slideshow() {
    var time = window.setInterval("slideshow()", 3000);
    next = $(".next");
    inside = parseInt($(".inside").css("left"));

    if (inside == -3080) {
        window.clearInterval(time);
        inside == 0;
    }
    else {
        next.trigger("click");
    }
}

2 个答案:

答案 0 :(得分:0)

在你的循环结束时你可以这样做:

$(".path0 a").click(); 

然后这将返回到第一张图像。所以它可能会成为:

$(document).ready(function(){   window.setInterval(“slideshow()”,3000); });

function slideshow(){ 
    var time = window.setInterval("slideshow()", 3000);
    next= $(".next");
    inside = parseInt($(".inside").css("left")); 
    if (inside==-3080)
    {
        window.clearInterval(time); 
        $(".path0 a").click(); 
    }
    else {next.trigger("click");}
};

我希望这会有所帮助: - )

答案 1 :(得分:0)

仅查看代码,至少有三个问题:

  • 你开始时间间隔太多次(一旦文档准备就绪,一次调用回调时),
  • 你没有使用var关键字,这是一个很大的错误,
  • 您进行比较而不是分配(inside==0),
  • 你使用==代替===(这是一种不好的做法,除非你真的知道自己在做什么,===不符合你的需要),

您的代码可能如下所示:

$(document).ready(function() {
    slideshow(); // execute once and start interval
});

function slideshow(){
    var time = window.setInterval("slideshow()", 3000);
    var next = $(".next");
    var inside = parseInt($(".inside").css("left")); 

    if (inside === -3080){
        window.clearInterval(time);
        inside = 0;
    } else {
        next.trigger("click");
    };
};

(确保inside === -3080比较不那么严格,因为只有一个像素的错误意味着间隔不会被清除 - 我认为inside <= -3080会更好)

我没有测试它,我刚刚解决了一些明显的问题。

修改

我刚刚发现你在每个间隔内开始新的间隔。不要做。在回调之外声明time,然后在回调中检查是否已设置,然后采取适当的措施。