В anime.js позиционирование анимаций играет ключевую роль при создании сложных последовательностей и синхронизированных эффектов. Управление временем начала каждой анимации и её длительностью позволяет создавать плавные, динамичные и визуально привлекательные взаимодействия.
delayСвойство delay определяет задержку перед стартом
анимации. Оно может быть задано как число (в миллисекундах) или как
функция, возвращающая индивидуальное значение для каждого элемента.
anime({
targets: '.box',
translateX: 250,
delay: 500, // все элементы начнут через 500мс
duration: 1000
});
Если delay задается функцией, она получает индекс
текущего элемента и может использоваться для создания каскадного
эффекта:
anime({
targets: '.box',
translateY: 100,
delay: (el, i) => i * 200, // элементы двигаются по очереди с шагом 200мс
duration: 1000
});
endDelayendDelay задает задержку после завершения
анимации, прежде чем произойдет переход к следующей в
последовательности или анимация завершится полностью.
anime({
targets: '.circle',
scale: 1.5,
duration: 800,
endDelay: 300 // задержка после завершения масштабирования
});
Это особенно полезно для циклических анимаций, чтобы создать паузы между повторениями.
offset для синхронизацииДля сложных timeline-анимаций ключевым является
свойство offset, которое определяет позицию конкретной
анимации относительно начала всей линии времени:
let tl = anime.timeline({
easing: 'easeOutExpo',
duration: 750
});
tl.add({
targets: '.box1',
translateX: 250
})
.add({
targets: '.box2',
translateY: 150,
offset: '-=500' // стартует за 500мс до завершения предыдущей анимации
});
Важные моменты при использовании offset:
'+=200') сдвигает анимацию
вперёд по времени относительно предыдущей.'-=200') запускает анимацию
раньше, создавая перекрытие действий.1000) задаёт точное время старта
относительно начала timeline.anime.js позволяет запускать анимации одновременно или по очереди.
offset: '+=...' создаёт цепочку, где каждая последующая
анимация начинается после предыдущей.tl.add({ targets: '.box1', translateX: 100 })
.add({ targets: '.box2', translateY: 50, offset: '+=0' }); // начинается сразу после box1
autoplay и
loopautoplay (true/false) позволяет управлять запуском
анимации. Если false, анимацию нужно запускать вручную через
.play().loop задаёт количество повторений анимации или
бесконечный цикл.anime({
targets: '.circle',
rotate: 360,
duration: 2000,
loop: true,
autoplay: false
}).play();
В anime.js delay, duration,
endDelay и offset могут быть функциями. Это
позволяет создавать сложные динамические анимации, где
каждый элемент реагирует по-разному:
anime({
targets: '.dot',
translateX: 200,
delay: (el, i, l) => i * 100,
duration: (el, i, l) => 500 + i * 100
});
В примере каждый элемент получает индивидуальное время старта и продолжительность движения, что создаёт эффект волны или каскада.
delay и duration.offset.delay и duration.endDelay и loop.