【发布时间】:2011-01-26 19:09:30
【问题描述】:
假设我有几个动画同时运行,我想在所有动画都完成后调用一个函数。
只有一个动画,很容易;有一个回调。例如:
$(".myclass").fadeOut(slow,mycallback);
问题是,如果我的选择器找到多个项目,将为每个项目调用回调。
解决方法并不难;例如:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var $mc=$(".myclass"),l=$mc.length;
$mc.fadeOut("slow",function(){
if (! --l) $("#target").append("<p>All done.</p>");
});
});
</script>
<style type="text/css">
</style>
</head>
<body>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<p class="myclass">Paragraph</p>
<div id="target"></div>
</body>
</html>
我的问题是:有没有更好的方法来做到这一点?
【问题讨论】:
-
在大多数情况下,我使用布尔值而不是计数器(因此该动作在第一个动画结束时执行),但除此之外它是相同的方法。好问题,我很好奇其他方式。
-
确实如此。例如,如果您的所有动画长度不同(不像我的简单示例),并且您只想在事物停止移动或在浏览器上淡出之后再做某事,您就想等待所有这些。
标签: jquery jquery-animate