Я хотел бы анимировать несколько объектов с помощью цикла for. код выглядит так:
for (var i = 0; i < 5; i++) {
$('.el-' + i).animate({
// code
}, 5000);
}
как я могу заставить цикл ждать завершения анимации? это возможно? только один элемент должен быть анимирован за раз.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как упоминалось @AlainDoe, вы можете использовать полный обратный вызов для запуска следующей анимации, примерно так.
const animateFunc = (i) => {
$(".el-" + i).animate({ // code }, 5000, "swing", () => {
if (i < 5) {
animateFunc(i + 1);
}
});
};
// start the first animation
animateFunc(0);
Используйте обратный вызов как рекурсивную функцию.
const count = 5;
function oneAtATime(i) {
$('.el-'+ i).animate({
opacity: 'toggle'
}, 1000, ()=>{if (i < count) oneAtATime(i+1)});
}
oneAtATime(0);<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "el-0">Zero</div>
<div class = "el-1">One</div>
<div class = "el-2">Two</div>
<div class = "el-3">Three</div>
<div class = "el-4">Four</div>
четвертый параметр функции
.animate- это ее обратный вызов полный. Вы можете использовать это для поэтапного запуска анимации, хотя вам придется немного переписать код. Имейте в виду, что это асинхронно.