Если вы хотите разобраться с этим, то это может превратиться в большой код, но простая реализация будет состоять всего из нескольких строк.По сути, вы хотите рекурсивно вызвать функцию, которая либо скрывает, либо показывает элемент из функции обратного вызова функции анимации:
$(function () {
//declare a function that can fade in/out any element with a specified delay and duration
function run_animation($element, delay, duration) {
//animate fade in/out after delay
$element.delay(delay).fadeToggle(duration, function () {
//after fade in/out is done, recursively call this function again with the same information
//(if faded-out this time then next-time it will be faded-in)
run_animation($element, delay, duration);
});
}
//initialize the animations for each element, specifying a delay and duration as well
run_animation($('.bottom-left'), 1000, 900);
run_animation($('.bottom-right'), 3000, 700);
});
Вот демоверсия: http://jsfiddle.net/xpw4D/
Документы для .fadeToggle()
: http://api.jquery.com/fadeToggle
Обновление
Вы можете немного увеличить этот код и анимировать более двух шагов, например:
$(function () {
function run_animation(options) {
//initialize the count variable if this is the first time running and reset it to zero if there are no more steps
if (typeof options.count == 'undefined' || options.count >= options.steps.length) {
options.count = 0;
}
options.element.delay(options.steps[options.count].delay).fadeToggle(options.steps[options.count].duration, function () {
options.count++;
run_animation(options);
});
}
run_animation({
element : $('.bottom-left'),
steps : [
{ delay : 1000, duration : 100 },
{ delay : 500, duration : 900 },
{ delay : 3000, duration : 500 }
]
});
run_animation({
element : $('.bottom-right'),
steps : [
{ delay : 2000, duration : 200 },
{ delay : 1000, duration : 1800 },
{ delay : 6000, duration : 1000 }
]
});
});
Вот демонстрация: http://jsfiddle.net/jasper/xpw4D/2/