Timeline в anime.js представляет собой мощный инструмент для создания последовательных и параллельных анимаций. Он позволяет объединять несколько анимационных объектов в одну цепочку и управлять их временем и синхронизацией с высокой точностью.
Создание timeline выполняется через функцию
anime.timeline(). Основной синтаксис:
const tl = anime.timeline({
easing: 'easeOutExpo',
duration: 1000,
});
Ключевые параметры timeline:
easing – задает общую кривую анимации для всех шагов.
Индивидуальные анимации могут переопределять этот параметр.duration – стандартная длительность всех анимаций, если
не указана собственная.loop – позволяет зациклить все анимации в
timeline.direction – normal, reverse,
alternate для управления направлением воспроизведения.Анимации добавляются с помощью метода .add(). Этот метод
принимает объект с параметрами анимации:
tl.add({
targets: '.box',
translateX: 250,
backgroundColor: '#FF0000',
duration: 1000,
})
.add({
targets: '.circle',
scale: 2,
duration: 500,
offset: '-=500' // смещение относительно предыдущей анимации
});
Особенности параметра offset:
'+' или '-' – смещение относительно
предыдущей анимации, например '-=200' запускает анимацию на
200 мс раньше окончания предыдущей.'start' или 'end' – начало или конец
timeline.Для сложных последовательностей анимаций важна визуальная отладка. Основные подходы:
Присвоение различного цвета элементам на разных этапах timeline помогает определить порядок и длительность анимаций.
tl.add({
targets: '.box1',
translateY: 100,
backgroundColor: '#00FF00'
})
.add({
targets: '.box2',
translateY: 100,
backgroundColor: '#0000FF'
});
Anime.js позволяет использовать метки (labels) для
точного позиционирования анимаций.
tl.add({
targets: '.box',
translateX: 200,
duration: 800,
}, 'phase1')
.add({
targets: '.circle',
scale: 1.5,
duration: 500,
}, 'phase1+=200'); // запускается через 200 мс после метки
Преимущество меток: упрощают управление сложными цепочками анимаций, делают код более читаемым.
Метод .seek() позволяет перемещать timeline в любое
место по времени для проверки промежуточных состояний.
tl.seek(500); // устанавливает timeline на 500 мс
Методы .pause(), .play() и
.reverse() помогают тестировать последовательности без
полного воспроизведения.
tl.add({
targets: '.box',
translateX: 300,
duration: 1000,
update: anim => console.log(anim.progress)
});
Позволяет видеть текущий процент завершения анимации и выявлять задержки или пересечения.
При сложных наложениях элементов временно можно изменить
opacity для выявления конфликтов:
tl.add({
targets: '.layer1',
opacity: [0, 1],
duration: 600
});
Timeline поддерживает пошаговое воспроизведение с помощью метода
.tick() в сочетании с requestAnimationFrame.
Это особенно полезно для точной отладки сложных сцен.
function step() {
tl.tick();
requestAnimationFrame(step);
}
step();
.seek() для контроля
промежуточных состояний.Эти техники позволяют точно управлять сложными анимационными цепочками, ускоряют отладку и повышают читаемость кода при работе с anime.js.