Timeline в anime.js представляет собой объект, позволяющий группировать несколько анимаций и управлять их воспроизведением как единой последовательностью. Timeline особенно полезен для сложных анимаций, где необходимо синхронизировать движение нескольких элементов или свойств с разными временными интервалами.
Создание Timeline осуществляется с помощью функции
anime.timeline(). Этот объект возвращает управляемую
последовательность анимаций, которую можно настраивать глобально.
const tl = anime.timeline({
easing: 'easeOutExpo',
duration: 750
});
В приведённом примере все анимации в timeline будут использовать
плавное ускорение easeOutExpo и продолжительность 750 мс по
умолчанию, если для конкретной анимации не указано иное.
Анимации добавляются в timeline с помощью метода add().
Каждый вызов add() создаёт новый шаг анимации:
tl
.add({
targets: '.box1',
translateX: 250,
opacity: 1
})
.add({
targets: '.box2',
translateY: 100,
opacity: 1
});
Ключевые параметры add():
Параметр offset позволяет точно указать момент начала каждой анимации в timeline:
tl
.add({
targets: '.box1',
translateX: 250
}, 0) // начало в 0 мс
.add({
targets: '.box2',
translateY: 100
}, '+=500') // через 500 мс после предыдущей анимации
.add({
targets: '.box3',
scale: 1.5
}, 300); // начать в 300 мс от начала timeline
Типы значений offset:
'+=N' или
'-=N' — относительное смещение от предыдущей
анимации.Timeline предоставляет методы управления воспроизведением, аналогичные одиночной анимации:
time миллисекунд.Пример:
tl.play();
setTimeout(() => tl.pause(), 1000);
setTimeout(() => tl.reverse().play(), 1500);
Timeline поддерживает повторение всех анимаций с помощью параметра loop. Его можно установить при создании timeline или при добавлении отдельных анимаций:
const tl = anime.timeline({
loop: true,
easing: 'easeInOutSine'
});
tl.add({
targets: '.circle',
translateX: 200
});
Timeline может использовать логическое значение true для
бесконечного цикла или числовое значение для определённого количества
повторов.
Timeline позволяет запускать несколько анимаций параллельно, задавая одинаковый offset для разных шагов:
tl
.add({
targets: '.box1',
translateX: 200
}, 0)
.add({
targets: '.box2',
translateY: 150
}, 0) // запускается одновременно с предыдущей
.add({
targets: '.box3',
scale: 1.5
}, '+=500'); // через 500 мс после первых двух
Это упрощает создание сложных визуальных эффектов с параллельным движением элементов.
Timeline поддерживает функции для вычисления значений анимации на лету:
tl.add({
targets: '.item',
translateX: (el, i) => i * 50, // смещение по индексу
delay: (el, i) => i * 100 // задержка для последовательного эффекта
});
Функции позволяют создавать последовательные или волнообразные эффекты без ручного задания каждого шага.
Timeline предоставляет доступ к текущему времени воспроизведения и общей длительности:
Пример контроля времени:
tl.seek(500); // перемещает timeline на 500 мс
console.log(tl.duration);
Timeline поддерживает события, которые вызываются в процессе анимации:
tl
.add({
targets: '.box',
translateX: 300
})
.finished.then(() => console.log('Timeline завершен'));
Метод finished возвращает промис, который срабатывает
при завершении всех шагов timeline.
Timeline anime.js позволяет создавать сложные анимации с точным контролем времени, параллельным запуском и синхронизацией элементов. Использование offset, динамических функций и событий делает его мощным инструментом для веб-анимации любого уровня сложности.