2011-03-22 52 views
25

我使用jQuery 1.5.1這是我的代碼:animate的回調函數(完成)在開始時執行?

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: alert('start ani'), 
    duration: 5000, 
    complete: alert('end ani')}); 

我得到兩個警報的動畫開始之前!?我希望完整的功能在動畫結束後啓動。有什麼想法嗎?

+0

http://api.jquery.com/animate – 2011-03-22 20:18:55

回答

28

您需要傳遞一個函數才能調用。相反,你正在調用這個函數。

complete: function() { alert('end ani'); } 
9

您需要傳遞一個函數才能完成。

試試這個:

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: alert('start ani'), 
    duration: 5000, 
    complete: function() { alert('end ani') } 
}); 

由於完成預期的功能,它執行您傳遞給它得到一個函數對象,它可以回調完成後的代碼。

+0

'easing'仍然是錯誤的。 – 2011-03-22 20:26:34

+0

是的,但從OP想知道動畫何時開始的問題來看,這將表明這一點。 – 2011-03-22 21:35:49

+0

它會工作,但它仍然是錯誤的。 'alert()'返回傳遞給'easing'的undefined,這就是它工作的原因。如果你想知道它何時開始,只需在'.animate()'調用之前放置'alert'。 – 2011-03-23 01:39:21

1

在函數聲明它們首先,否則該方法將立即調用:

var onComplete = function() { 
    alert('end ani'); 
}; 

然後調用它們沒有()

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: 'slow', 
    duration: 5000, 
    complete: onComplete //<-- function is passed as a variable, not called directly 
}); 

直接將它們包裝成一個函數(以下當撥打這個很多時,可讀和較慢):

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: 'slow', 
    duration: 5000, 
    complete: function() { 
     alert('end ani'); 
    } 
}); 
+0

'easing'仍然是錯誤的。此代碼不起作用。 – 2011-03-22 20:27:26

+0

緩動通常是一個字符串,在這種情況下,我不知道OP的意圖是什麼,或者他如何得到這些代碼。 – 2011-03-22 20:29:53

+0

現在我收到一個錯誤:d.easing [j || k]不是函數? – Overbeeke 2011-03-22 20:30:27

22

我看到兩件事情是錯誤的。

一,easing應該是:

A string indicating which easing function to use for the transition

而且complete應該是一個功能。

http://api.jquery.com/animate

alert('start ani'); 
$('.cellcontent').animate({ 
    left: '-=190' 
    }, 
    { 
    easing: 'swing', 
    duration: 5000, 
    complete: function(){ 
     alert('end ani'); 
    } 
}); 
-1
$('.cellcontent').animate({ 
    left: '-=190', 
    easing: 'slow', 
    duration: 5000, 
    function() { 
    alert('end ani'); 
    } 
}); 
0

我不認爲你需要 「完整」?

slideToggle(
 
\t \t \t \t \t "fast","swing", function(){ 
 
\t \t \t \t \t \t \t // your code here 
 
\t \t \t \t \t \t } 
 
\t \t \t \t);

3

最佳解決方案是這樣的。

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: alert('start ani') 
}, duration).promise().done(function() { 
    alert('end animation'); 
}); 
2

jquery docs

$("#clickme").click(function() { 
    $("#book").animate({ 
    opacity: 0.25, 
    left: "+=50", 
    height: "toggle" 
    }, 5000, function() { 
    // Animation complete. 
    }); 
}); 
+0

這是最短的解決方案。 – morning 2018-03-01 12:42:23

相關問題