问题是您正在使用 fadeOut 操作的回调函数触发下一步。所以下一个fadeIn 发生在fadeOut 完成之后。相反,您希望在延迟之后发生淡入。您可以使用该queue
方法来实现此目的:
.delay(timing).queue(function() {
function2();
$(this).dequeue(); // Keeps the queue running, it stops if you don't do this
}).fadeOut("slow", 0.3);
我在这里创建了一个小提琴http://jsfiddle.net/e8W5E/来展示它
编辑响应 roXon 的评论,您可以编写更优雅的解决方案,如下所示。HTML 已更新以删除多余的计数...
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
jQuery然后看起来像......
$(function() {
// These are the elements we will rotate
var $blocks = $(".block");
// Set up the initial elements to 0.3 opacity
$blocks.not(":eq(0)").fadeTo("fast", 0.3);
// This is our repeating function
var go = function($el, i, high, low, t) {
$el.eq(i).fadeTo("slow", high)
.delay(t)
.queue(function() {
// The next index is 1 + the current index
// use modulus to repeat back to the beginning
var next = (i + 1) % $el.length;
go($el, next, high, low, t);
$(this).dequeue();
})
.fadeTo("slow", low);
};
// Start fading in and out
go($blocks, 0, 1, 0.3, 1000);
})();
您可以使用该类名称添加任意数量的块,它将包含在 fadeIn 和 fadeOut 旋转中。和小提琴http://jsfiddle.net/e8W5E/1/