2012-10-08 102 views
1

我做了一個滑塊,它自動播放罰款,暫停懸停並再次開始模糊。大。clearInterval沒有清除點擊(但在懸停工作正常)

但是,當你點擊它,它開始一個新的時間間隔和x2一樣快,我不能讓它清除?

這裏是我的代碼:

// Reset autoPlay() if a user clicks a nav button 
$('#sliderNav a').click(function(e) { 
    setTimeout(autoPlay(), delay); 
}); 

// Auto play the slider 
var delay = 4000; // 4 seconds 
function autoPlay() { 
    myInterval = setInterval(function() { 
     currentOffset += itemWidths[clickCount] // Add the current slides width to total offset 
     $sliderWrap.animate({right: currentOffset}, 500, function() { 
      clickCount++; 
      // If this is the last slide when clicking .next, slide to clone then snap back to beginning. 
      if (itemWidths.length == clickCount) { 
       clickCount = 0; 
       currentOffset = totalWidth; 
       $sliderWrap.css('right',currentOffset); // Where we started originally 
      } 
     }); 
    }, delay); 
}  
autoPlay(); 

// Stop autoPlay() on hover 
$('#slider, #sliderNav a').hover(function() { 
    clearInterval(myInterval); 
}, 
// start autoPlay() on blur 
function() { 
    autoPlay(); 
}); 

實際工作演示,所以你可以看到它的實數:http://www.jonheslop.com/canoe/

+0

當有人點擊時,您想要發生什麼? –

+0

笑,它因爲烏爾.hover是壓倒烏拉圭回合。點擊!ü需要immidiately禁用.hover上點擊 – SpYk3HH

+0

@ SpYk3HH我試過,但在取出.hover()函數沒有任何改變... – jonheslop

回答

1

你應該通過函數引用,而不是函數的返回值

use setTimeout(autoPlay, delay); instead of setTimeout(autoPlay(), delay); 

您應該在autoPlay中clearInterval,以便在一次又一次調用時清除較早的setInterval。

var myInterval ; 
    function autoPlay() { 
     clearInterval(myInterval); // clear older setInterval. 
     myInterval = setInterval(function() { 
      .............. 
+0

謝謝!這很有用:D – jonheslop

0

使用全局變量來存儲的setTimeout的ID:

var timer = 0; 

$('#sliderNav a').click(function(e) { 
    timer = setTimeout(autoPlay(), delay); 
}); 

...

// Stop autoPlay() on hover 
$('#slider, #sliderNav a').hover(function() { 
    clearInterval(timer); 
}, 

....

+1

該變量不必是全局的,只需要設置和清除函數都可以訪問。 –

+0

從setTimeout()返回的id上使用clearInterval()不起作用。再加上@epascarello說的。 – lqc

+0

@Iqc - 你爲什麼說它不能工作?你試過了嗎?試試吧,讓我知道.. –

0

你有一個bug

setTimeout(autoPlay(), delay); <-- you are calling the function right away. 

您需要刪除()

setTimeout(autoPlay, delay); 
+0

謝謝,完全應該發現了一個! – jonheslop