【发布时间】:2012-09-22 10:05:10
【问题描述】:
使用 jQuery 向单个 dom 元素添加一系列动画非常简单。 jQuery 为我排好队,我基本上什么都不用做。
但是,在多个元素上制作一系列动画(例如,pictureDiv 淡出,然后人口统计Div 淡入)要困难得多。我写了一个插件类型的东西来使它更容易,如下所示:
var something.createAnimationQueue = function () {
// jQuery queues up animations on each dom element (/ jquery object)
// We want to queue up animations over different dom elements so
// use a jquery object on a blank element
var animationQueue = $({});
return {
add: function (animationFunctionContext, animationFunction) {
var args = $.makeArray(arguments).slice(2);
animationQueue.queue(function (next) {
$.when(animationFunction.apply(animationFunctionContext, args)).done(next)
})
}
}
}
这样用的
var animationQueue = something.createAnimationQueue();
animationQueue.add(pictureDiv, pictureDiv.fadeOut, 'slow');
animationQueue.add(demographicsDiv, demographicsDiv.fadeIn, 'slow');
我的问题是:
1) 我错过了什么吗?有没有我不知道的更简单的方法。
2) 如果没有,有没有办法避免将pictureDiv 和pictureDiv.fadeOut 传递给animationQueuer? (我试过了,想不出来)
谢谢!
【问题讨论】:
-
我假设你想这样做是因为内置的回调太冗长了?
-
@Shmiddty 是的,只是使用回调或承诺链接一些东西很好,但如果你正在做,比如说,20,那么事情很快就会变得丑陋。
-
一个问题是你不能为某些动画调用回调,有没有办法做到这一点?
-
嗨@Tebb。你是说 "$.when(animationFunction.apply(animationFunctionContext, args)).done(next)" 不像你期望的那样工作吗?如果不是,恐怕我不明白这个问题。
-
我没有测试过这段代码,但是如果我想在
animationQueue.add(pictureDiv, pictureDiv.fadeOut, 'slow');和animationQueue.add(demographicsDiv, demographicsDiv.fadeIn, 'slow');之间发出警报,我该怎么做?
标签: javascript jquery animation queue