2011-03-22 87 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

相关问题