Jquery排队动画
我想要在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(); }
查看jQuery Effects的文档 。 关于排队的事情应该做你需要的。
我刚刚使用这个插件http://plugins.jquery.com/project/timers ,前几天做了类似的事情。 您基本上遍历所有匹配的dom元素,然后在索引*您的毫秒计数时执行每个动画。
代码是这样的:
HTML:
These Show In Order
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);