animate的回调函数(完成)在开始时执行?

时间:2011-03-22 20:14:58

标签: jquery

我正在使用jQuery 1.5.1这是我的代码:

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

我在动画开始之前得到了两个警报!?我希望在动画结束后启动完整的功能。有什么想法吗?

9 个答案:

答案 0 :(得分:31)

您需要传递一个函数来调用。相反,你正在调用该函数。

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

答案 1 :(得分:27)

我认为这有两个问题。

一,easing应为:

  

表示缓和的字符串   用于过渡的功能

complete应该是一个函数。

http://api.jquery.com/animate

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

答案 2 :(得分:10)

您需要传递一个功能才能完成。

试试这个:

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

由于complete需要一个函数,它会执行你传递给它的代码,以获得一个函数对象,它可以在完成时回调。

答案 3 :(得分:4)

最佳解决方案就是这个。

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

答案 4 :(得分:3)

来自jquery docs

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

答案 5 :(得分: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');
  }
}); 

答案 6 :(得分:0)

我认为你不需要“完整”吗?

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

答案 7 :(得分:0)

当我有几个与选择器匹配的元素时,我遇到了同样的问题。当我将 HTML 和代码更改为只有一个元素与选择器匹配时,一切都很好。

答案 8 :(得分:-1)

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