您可以使用jQuery queue将淡入队列排队。像这样:
在 jsFiddle 现场观看。
//--- Queue-up the fade-in's
var animationQ = $({});
$("#navtop a").each ( function () {
var jThis = $(this);
animationQ.queue ('FadeIns', function (nextQ_Item) {
jThis.fadeIn (5000, function() {
nextQ_Item ();
} );
} );
} );
//--- Start the fade-ins.
animationQ.dequeue ('FadeIns');
这种方法的优点是您可以将任何节点集合排队,只需更改选择器即可。他们不必是兄弟姐妹。
更新:
要错开淡入开始的一部分,请使用:
var fadeTime = 5000; //-- How long will an individual fade last? (mS)
var fadeStagger = 500; /*-- How far into i=one element's fade will
the next elements fade start? (mS)
*/
//--- Queue-up the fade-in's
var animationQ = $({});
$("#navtop a").each ( function (J) {
var jThis = $(this);
animationQ.queue ('FadeIns', function (nextQ_Item) {
jThis.fadeTo (fadeStagger, fadeStagger / fadeTime , function() {
nextQ_Item ();
jThis.fadeTo (fadeTime - fadeStagger, 1);
} );
} );
} );
//--- Start the fade-ins.
animationQ.dequeue ('FadeIns');
在 jsFiddle 上查看。
要求的解释:
我们通过对空对象 ( $({})
) 进行 jQuery-ing 设置了一个通用队列容器。这似乎比将队列附加到某个节点更干净。
我们使用任何有效的 jQuery 选择器选择我们的节点,然后使用函数each()
Doc循环它们。
对于每个节点,我们使用Doc函数在queue()
自定义队列中添加一个条目。
- 我们给队列一个唯一的名称“FadeIns”以避免冲突。
- 每个队列条目将在调用时传递一个指向下一个队列条目的指针。我们用
nextQ_Item
变量来捕捉它。
- 队列项函数有 2 个工作:(1) 使项淡入淡出,(2) 完成后调用下一个队列条目。
- 然而,我们已经将淡入淡出的文档分成两部分来完成所需的交错开始。
- 第一次淡入淡出仅持续
fadeStagger
延迟时间。我们通过延迟时间与总时间的比率来计算结束不透明度。
- 现在我们触发下一个元素。
- 接下来,我们恢复并完成淡入淡出,记住它只剩下 (total - stagger-delay) 毫秒。
- 构建自定义队列后,我们使用Doc函数将其启动
dequeue()
。