2012-02-25 75 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