Поскольку очередь составляет на элемент , здесь на самом деле ничего не стоит в очереди, поэтому все они анимируются одновременно.Хотя есть несколько способов сделать это.Один простой способ сделать это с небольшим количеством предметов - это .delay()
, например:
$('#bar').animate(
{width: '100%'},
{duration: 500,
specialEasing: {width: 'linear'},
complete: function() {
$('li').each(function(i) {
$(this).delay(i*200).animate(
{top:'0px'},
{queue: true, duration: 200, specialEasing: {top: 'easeOutBack'},
});
});
}
});
Вы можете проверить демо здесь .
Это задерживает анимацию на 200 мс * индекс элемента в итерации .each()
, поэтому первая анимация происходит мгновенно, вторая - через 200 мс, а затем следующие 200 мс.и т. д. Причина, по которой я рекомендую это, заключается в том, что у вас нет , чтобы использовать 200 мс для задержки, вы можете использовать меньшее число и анимации немного перекрываются, что, по-видимому, является эффектом, который вы используете.after.
Другой способ сделать это (более подробный, только последовательный и не допускающий перекрытия) - использовать .queue()
для создания собственного, например:
$('#bar').animate(
{width: '100%'},
{duration: 500,
specialEasing: {width: 'linear'},
complete: function() {
$('li').each(function() {
$(document).queue(function(n) {
$(this).animate(
{top:'0px'},
{queue: true, duration: 200, specialEasing: {top: 'easeOutBack'},
complete: n //call the next item in the queue
});
});
});
}
});
Вы можете проверить эту версию здесь .