在jQuery动画中只执行一次完整的function?

我正在尝试为某些文本的字体大小设置动画:

$("p").delay(500).animate({ "font-size": "+=50" }, 1000, function() { alert("Done"); })​; 

这是一个演示。

我希望在动画

之后做一些事情,在示例中它是alert ,但令人惊讶地为每个

运行它,这不是我想要的。 有没有办法让它只运行一次或不可能?

 var $p = $("p"); var lastIndex = $p.length - 1; $p.delay(500).animate({ "font-size": "+=50" }, 1000, function() { if ($p.index($(this)) == lastIndex) { alert("Done"); } }) 

演示

请注意,您还可以使用promise对象 :

返回一个Promise对象,以观察绑定到已排队或未排队的某个类型的所有操作是否已完成。

第一个例子( 演示 ):

 $("p").delay(500).animate({ "font-size": "+=50" }, 1000).promise().done(function(){ alert("done"); });​ 

第二个例子( 演示 ):

 $.when($("p").delay(500).animate({ "font-size": "+=50" }, 1000)).done(function(){ alert("done"); });​ 

你可以保持一面旗帜,因为他们应该同时制作动画:

 var done = false; $("p").delay(500).animate({ "font-size": "+=50" }, 1000, function() { if(!done) { done = true; alert("Done"); } })​; 

这是一个演示。

给有问题的P-tag一个ID并选择该ID而不是页面上的每个P标签。 喜欢这里: http : //jsfiddle.net/LR8uP/1/

或者,如果您想为每个P-tag设置动画但只运行一次该函数,请添加一个状态变量,如下所示: http : //jsfiddle.net/LR8uP/2/

此代码可用作通用“倒计时”类型的函数。

 // Function that returns a function, // which when invoked 'count' number of times, // will invoke the function 'fn' function runOnZero (count, fn) { return function () { if (--count <= 0) { fn(); } }; } // Get all the 

s var ps = $("p"); // Do your thing after ps.length calls var whenAllDone = runOnZero(ps.length, function () { alert("Done"); }); ps.delay(500).animate({ "font-size": "+=50" }, 1000, whenAllDone)​;