anime.timeline() позволяет объединять несколько анимаций
в единую последовательность, задавая общие параметры и обеспечивая
согласованное взаимодействие между ними. Timeline может содержать
несколько анимаций, которые запускаются по
очереди или параллельно, в зависимости от
указанных смещений.
Создание timeline:
const tl = anime.timeline({
easing: 'easeOutExpo',
duration: 1000
});
Здесь все анимации внутри timeline будут по умолчанию иметь
easeOutExpo и длительность 1000 мс, если не указано иначе
для конкретной анимации.
Метод add() добавляет анимацию к timeline. Основные
параметры:
targets — элемент или набор элементов для
анимации.translateX, opacity,
scale и т.д.offset — определяет положение анимации
относительно начала timeline или относительно предыдущей
анимации.Пример последовательного добавления анимаций:
tl
.add({
targets: '.box1',
translateX: 250
})
.add({
targets: '.box2',
translateY: 150
});
По умолчанию каждая следующая анимация начинается после завершения предыдущей.
Для одновременного запуска используется
offset:
tl
.add({
targets: '.box1',
translateX: 250
})
.add({
targets: '.box2',
translateY: 150,
offset: '-=500' // старт на 500 мс раньше окончания предыдущей анимации
});
Timeline могут быть вложенными, что позволяет
создавать сложные анимационные последовательности с иерархией и
повторением. Вложенный timeline добавляется как анимация внутри
add().
Пример вложенного timeline:
const subTimeline = anime.timeline({
easing: 'easeInOutSine',
duration: 500
});
subTimeline
.add({
targets: '.circle',
scale: 1.5
})
.add({
targets: '.circle',
rotate: 180
});
const mainTimeline = anime.timeline({
easing: 'linear',
duration: 1000
});
mainTimeline
.add({
targets: '.box',
translateX: 300
})
.add(subTimeline, '-=500'); // вложенный timeline запускается за 500 мс до конца предыдущей анимации
Здесь subTimeline управляет отдельной анимацией, но
синхронизируется с основным timeline, используя
offset.
Offset может быть указано:
'+=' или
'-=' — смещение относительно предыдущей
анимации.Пример сложного управления временем:
mainTimeline
.add({
targets: '.box1',
translateX: 200
})
.add({
targets: '.box2',
translateY: 150
}, '-=300') // начинается за 300 мс до окончания первой анимации
.add({
targets: '.box3',
opacity: [0, 1]
}, 500); // абсолютное смещение: старт через 500 мс от начала timeline
Timeline поддерживает ключевые свойства управления:
loop — число повторов (true =
бесконечно).direction — направление: 'normal',
'reverse', 'alternate'.autoplay — автоматический запуск (true по
умолчанию).Пример повторяющегося вложенного timeline:
const repeatingTimeline = anime.timeline({
loop: 3,
direction: 'alternate'
});
repeatingTimeline
.add({
targets: '.dot',
translateY: 100,
duration: 400
})
.add({
targets: '.dot',
translateY: 0,
duration: 400
});
Вложенный timeline унаследует эти настройки, если они не переопределены локально.
Timeline можно останавливать, запускать заново, изменять прогресс:
const tl = anime.timeline({ autoplay: false });
tl.add({ targets: '.box', translateX: 300, duration: 1000 });
tl.play(); // запуск
tl.pause(); // пауза
tl.restart(); // перезапуск
tl.seek(500); // перемотка на 500 мс
Это особенно удобно при вложенных timeline, когда нужно синхронизировать несколько анимационных блоков или динамически менять поведение во время взаимодействия с пользователем.
Вложенные timeline в anime.js позволяют создавать сложные анимационные последовательности с контролем каждой детали, обеспечивая модульность и гибкость при построении интерфейсов и анимационных эффектов.