连续运行jQuery动画
Running jQuery animations serially
我有一组淡出动画,之后我想运行一组animation
调用。
我如何确保一个在另一个之后运行?
如果我这样做:
$(div1).fadeOut(600);
$(div2).fadeOut(600);
$(div3).fadeOut(600);
$(div4).animation({opacity:1},600);
$(div5).animation({opacity:1},600);
$(div6).animation({opacity:1},600);
动画并行运行。
上面的代码只是对问题的简化/抽象。我不能将所有的调用分组在一个函数中,并且在现实生活中有一个可变数量的元素,每个元素都由它自己的类管理。
你可以使用jQuery延迟对象:
var deferred = [
new $.Deferred(),
new $.Deferred(),
new $.Deferred()
];
$(div1, div2, div3).each(function(i, elem) {
$(elem).fadeOut(600, function() { deferred[i].resolve(); });
});
$.when(deferred[0], deferred[1], deferred[2]).done(function() {
$(div4, div5, div6).each(function(i, elem) {
$(elem).animation({ opacity : 1 }, 600);
});
});
正如@Felix在评论中指出的那样,$.when
的更简洁的语法应该是这样的:
$.when.apply(null, deferred).done(function() {
$(div4, div5, div6).each(function(i, elem) {
$(elem).animation({ opacity : 1 }, 600);
});
});
如果你使用的是jQuery 1.6+, deferred.pipe()可以简化代码:
$.Deferred(function (dfr) {
dfr
.pipe(function () { return $(div1).fadeOut(600); })
.pipe(function () { return $(div2).fadeOut(600); })
.pipe(function () { return $(div3).fadeOut(600); })
}).resolve();
裁判:http://blog.darkthread.net/post - 2011 - 08 - 03 -递延-管- animation.aspx
相关文章:
- 如何简化动画jQuery代码
- 如何禁用可排序动画 Jquery
- 离开页面前的动画JQuery
- 动画Jquery弹出菜单
- 设置元素动画jquery
- 如何自动动画jquery画廊
- 缩放/动画 jQuery 拖放到可拖放时可拖动
- 卡片动画Jquery和CSS
- 拆分襟翼文本动画 Jquery
- 满足条件时禁用动画 jQuery
- 传递参数以动画 jquery 函数
- 延迟和动画 jQuery
- 获取动画 jQuery Java 脚本中行进的像素数
- 重新启动动画jquery和javascript
- 为什么这个脚本在页面加载后3秒没有动画(jquery)
- 菜单图标动画jQuery
- 制作无限动画jQuery
- 将延迟应用于动画jquery
- 添加滑动回调动画Jquery
- 使用动画 jquery 更改文本