2016-07-27 44 views
0

我有多個項目,應用setInterval動畫內容。我有一個clearInterval設置,停止懸停的動畫。當然,這會停止所有動畫項目。我只想清除懸停的項目上的間隔,並允許其他項目繼續進行動畫製作。動畫與對方不同步,我很好。如何在單個元素應用於多個元素時清除setInterval?

var boxInterval = setInterval(startBox, 3000); 

$('.box').mouseenter(function(){ 
    clearInterval(boxInterval); 
}); 

$('.box').mouseleave(function(){ 
    boxInterval = setInterval(startBox, 3000); 
}); 

jsfiddle:通知懸停在另一個暫停。懸停關閉啓動它們(3秒後)

+0

你可以顯示開始框或工作小提琴的代碼? –

+0

'setInterval'應用於整個窗口,你可能想添加一些標誌(布爾值)來執行或不執行某些元素 – Kaiido

+0

@RajaSekar,增加了一個jsfiddle – dcp3450

回答

1

setTimeout/setInterval返回的參考不附加到元素。你必須保存每個參考唯一。我會用一個.data()屬性去...

$('.box').mouseenter(function(){ 
    clearInterval($(this).data('timer')); 
}); 

$('.box').mouseleave(function(){ 
    $(this).data('timer', setInterval(startBox, 3000)); 
}); 
+0

我試圖通過將'setInterval '轉換成'.each()',但是這些讓我感到奇怪,所以我認爲我錯了。 – dcp3450

+0

它花了一些重構,但我發現我遇到的問題。我正在運行另一個「每個」,這導致了一個奇怪的延遲。修復你的答案作爲靈感的問題。 – dcp3450

0

我認爲這兩個事件總是成對觸發,這樣可節省boxInterval每個項目。