我想要在dom中的不同对象上执行几个动画。
我希望它们按顺序发生。
我不想这样做:
$('#first').show(800, function ()
{ $('#second').show(800, function () {...etc...});
我想将所有动画(和cpu密集型函数)添加到某种队列对象中,以确保它们按顺序执行。
我想要在dom中的不同对象上执行几个动画。
我希望它们按顺序发生。
我不想这样做:
$('#first').show(800, function ()
{ $('#second').show(800, function () {...etc...});
我想将所有动画(和cpu密集型函数)添加到某种队列对象中,以确保它们按顺序执行。
我不确定你为什么不想使用你描述的方法。如果纯粹从组织的角度来看,您不必使用匿名函数
function showFirst() {
$('#first').show(800, showSecond);
}
function showSecond() {
$('#second').show(800, showThird);
}
function showThird() {
$('#third').show(800);
}
function startAnimation() {
showFirst();
}
我不确定你为什么不想使用你描述的方法。如果纯粹从组织的角度来看,您不必使用匿名函数
function showFirst() {
$('#first').show(800, showSecond);
}
function showSecond() {
$('#second').show(800, showThird);
}
function showThird() {
$('#third').show(800);
}
function startAnimation() {
showFirst();
}
我刚刚用过这个插件 http://plugins.jquery.com/project/timers,前几天做了类似的事情。您基本上遍历所有匹配的dom元素,然后在索引*您的毫秒计数时执行每个动画。
代码是这样的:
HTML:
<div id="wrapper">
<div>These</div>
<div>Show</div>
<div>In</div>
<div>Order</div>
</div>
jQuery的
$("#wrapper div").foreach( function(i) {
i = i + 1;
$(this).oneTime(800 * i, "show", function() {
$(this).show();
});
});
这也行得通。
$('#first').show(800);
setTimeout("$('#second').show(800)", 800);
setTimeout("$('#third').show(800)", 1600);
setTimeout("$('#forth').show(800)", 2400);
我知道它不是纯粹的顺序,但我发现它使它易于阅读,并允许您以更灵活的方式设置动画。
注意:您必须引用要执行的代码。我没有在前面的代码中使用任何双引号,但如果你这样做,你将按如下方式转义它们。
$('#first').animate({"width":"100px"}, 500);
setTimeout("$('#second').animate({\"width\":\"100px\"}, 500)", 800);
setTimeout("$('#third').animate({\"width\":\"100px\"}, 500)", 1600);
setTimeout("$('#forth').animate({\"width\":\"100px\"}, 500)", 2400);
您通常可以通过交替使用哪些引号来避免这种情况,但值得一提。
更新:这是另一个选项,它也值得检查jquery promises 这里
$('#first').show(800);
$('#second').delay(800).show(800);
$('#third').delay(1600).show(800);
$('#forth').delay(2400).show(800);