2011-08-09 68 views
8

他們的方式來檢測元素是否動畫或檢測元素的值是否正在改變?jQuery動畫檢測是否動畫?

因爲我需要觸發一個功能,如果一個元素是動畫。不完整的動畫。當所選擇的元素製作動畫

+0

什麼時候觸發? –

回答

21

下面返回true:

var isAnimating = $("#someid").is(':animated'); 

的更多細節:

http://api.jquery.com/animated-selector/
和/或
http://api.jquery.com/animate/
步驟:的函數被稱爲a過了動畫的每一步。

+0

安迪請我只是澄清我對僞選擇器的理解:動畫。我看到的行爲是,一旦元素開始動畫,即使元素已經返回到起始點,(:animated)也是如此。因此,我使用步驟來檢測動畫何時到達動畫位置。有沒有辦法來打開和關閉僞選擇器? – codepuppy

+0

@codepuppy這很奇怪,我在這裏做了一個測試:http://jsfiddle.net/aPk3y/1/它返回正確的值。我不認爲有一個簡單的操作方法:直接動畫。 – Andy

+0

安迪感謝這個例子。好吧,我可以看到它適合你。所以我必須在某個地方犯錯。我會回去再次檢查我的測試。 – codepuppy

1

一個簡單的方法就是添加一個全局布爾值,一旦動畫開始,它就會被設置爲true。然後,您將一個回調函數添加到該動畫,並在完成後將其設置爲false

var running = false; 

$('#start').click(function(){ 

    running = true; 

    $('#target').animate({opacity: 0.5},'slow',function(){ 

     running = false; 

    }); 

}); 

編輯:哦,我猜是有一個選擇器。

+1

如果您使用此方法,請注意您如何使用它,因爲在特殊情況下可能會導致競爭狀況。例如:'1。點擊開始按鈕(1) - running = true - t = 0ms''2。點擊開始按鈕(2) - running = true - t = 200ms''3。動畫(1)結束 - running = false - t = 600ms''4。動畫(2)running - running = false - 600ms

0

因爲我需要觸發一個函數,如果一個元素是動畫。不完整的動畫。

由於$(element).on(":animated", function(){ ... });似乎不工作,我能看到的唯一方法是非常簡單地執行你想,當你執行你的動畫調用該函數:

$(selector).animate(. . .); 
functionToCall(); //called with animate above 

另一種解決辦法,就是你可以創建自己的庫來處理啓動動畫,並且在開始以上述簡單方式開始動畫之後處理調用必要的功能。

所以只是一些僞代碼:

var animation = new MyAnimationLibrary(function() { $(selector).animate(...) }); 
animation.onStart.push(function() { 
    alert('animation starts'); 
}); 
//then later in the code: 
animation.start(); 

然後,只需作出上述呼籲的陣列animation.onStart的功能和觸發動畫。