2012-02-25 97 views
2

我刚刚了解到这一点,所以我会尽可能清楚地解释它。JavaScript clearInterval只能使用一次?

我有一个函数循环。我想要完成的是什么东西在循环停止时悬停,然后在光标离开时再次开始。这似乎工作正常,但如果我悬停,离开,然后再次悬停动画保持循环。最糟糕的是,如果我鼠标进/出两次循环间隔得到更新,所以它在设定的时间内循环两次。

无论如何,这是我的代码我的工作:

var transition_delay = "3000"; 

function next_image(){ 
    var current_eq = $('ul#triggers li.current_trigger').index(); 

    if (current_eq == li_count) { //if this is the last image in the array 
     $triggers.removeClass("current_trigger").eq(0).addClass("current_trigger"); //removes current and adds it to next 
     $displays.fadeOut("slow").eq(0).fadeIn("slow"); //fades out then in next display 
    } 
    else { //if not last image 
     $triggers.removeClass("current_trigger").eq(current_eq + 1).addClass("current_trigger"); //removes current class and adds it to next 
     $displays.fadeOut("slow").eq(current_eq + 1).fadeIn("slow"); //fades out then next display in 
    } 
}; 

$triggers.hover(
    function(){ //in 
     console.log("clearing"); 
     clearInterval(next_image_interval); 
    }, 
    function(){ //out 
     console.log("starting"); 
     sliderIntervalID = setInterval(function(){next_image();},,transition_delay); 
}); 

next_image_interval = setInterval(function(){ 
next_image(); 
}, transition_delay); 
+0

悬停处理程序中的双逗号(在transition_delay之前)...? – cHao 2012-02-25 04:14:02

+0

'sliderIntervalID = setInterval'可能是'next_image_interval'? – Cheery 2012-02-25 04:14:24

+1

顺便说一句,就这么说,'function(){next_image();}'可以在这里用'nextImage'代替(例如:'setInterval(next_image,transition_delay);')。函数包装对于调用一堆东西和/或扩展范围等是很好的,但在这里并不需要(你所要做的只是调用一个函数)。 – cHao 2012-02-25 04:20:48

回答

2

在悬停了,你这样做是:

sliderIntervalID = setInterval(function(){next_image();},,transition_delay); 

但你清除:

clearInterval(next_image_interval); 

sliderIntervalID更改为next_image_interval,应该按预期工作。

+0

cHao:只是一个错字,这不是我的实际代码,奇怪的是。我不确定那是怎么回事。 冰雹:完美的工作,谢谢!这是我第一次尝试循环播放任何东西,所以你一直很有帮助。 – user1220109 2012-02-25 17:27:55

+0

当然,很乐意帮忙! – 2012-02-25 18:07:50