Библиотека SVG.js предоставляет мощные возможности для создания анимаций и управления ими через события. События анимации позволяют контролировать момент начала, окончания или промежуточные состояния анимации, что особенно важно при сложных интерактивных графических интерфейсах и динамических визуализациях.
animate() – базовый метод для создания
анимации элемента. Возвращает объект анимации, к которому можно
привязать события.const rect = draw.rect(100, 100).fill('#f06');
const animation = rect.animate(1000, '<>').move(200, 200);
during(callback) – вызывается на
каждом кадре анимации. Параметры callback:
pos – текущая позиция анимации от 0 до 1.morph – текущее значение промежуточного состояния
анимируемого свойства.animation.during((pos, morph) => {
console.log(`Позиция: ${pos}, текущее значение: ${morph}`);
});
after(callback) – срабатывает после
завершения анимации.animation.after(() => {
console.log('Анимация завершена');
});
loop(times, reverse) – позволяет
повторять анимацию заданное количество раз. Второй параметр
reverse задает чередование направления анимации.animation.loop(3, true);
onStart(callback) – вызывается в
момент начала анимации.onFinish(callback) – срабатывает при
полном завершении анимации.animation.onStart(() => console.log('Начало анимации'));
animation.onFinish(() => console.log('Конец анимации'));
Эти методы полезны для синхронизации нескольких анимаций или запуска логики после их завершения.
Метод during() позволяет не только
отслеживать прогресс, но и изменять свойства других элементов
динамически:
const circle = draw.circle(50).fill('blue');
rect.animate(2000).move(300, 300).during((pos) => {
circle.radius(50 + 50 * pos); // изменение радиуса в зависимости от позиции
});
Таким образом, анимация одного элемента может управлять поведением других объектов, создавая комплексные сцены.
stop() – мгновенно останавливает
анимацию.pause() и
play() – позволяют приостанавливать и
возобновлять анимацию.animation.pause();
setTimeout(() => animation.play(), 1000); // возобновление через 1 секунду
Прерывание анимации автоматически вызывает события
onFinish, если анимация завершается
досрочно.
SVG.js поддерживает цепочку анимаций с использованием
after() и колбеков:
rect.animate(1000).move(200, 0)
.after(() => rect.animate(1000).move(200, 200)
.after(() => rect.animate(1000).move(0, 200))
.after(() => rect.animate(1000).move(0, 0))));
Это позволяет создавать сложные маршруты движения, не прибегая к сторонним библиотекам или таймерам.
События анимации можно привязывать к DOM-событиям, создавая интерактивные эффекты:
rect.on('click', () => {
rect.animate(500).rotate(180).after(() => console.log('Вращение завершено'));
});
Комбинирование пользовательских событий и событий анимации позволяет строить адаптивные интерфейсы и визуальные отклики на действия пользователя.
during(), так как это единственный метод с доступом к
pos и morph.after(), избегая ручного управления таймерами.onStart и
onFinish удобны для логирования и синхронизации
внешних эффектов.pause() и play() позволяет
создавать управляемые анимации, полезные для презентаций или
интерактивных визуализаций.При запуске нескольких анимаций на одном элементе важно помнить:
during(), after(),
onStart() привязаны к конкретной анимации.after() или промисы через
animate().finished().rect.animate(500).move(100, 0)
.after(() => rect.animate(500).move(100, 100));
Это предотвращает конфликты и обеспечивает предсказуемое поведение анимации.
События анимации в SVG.js обеспечивают точный контроль над временем, последовательностью и синхронизацией движения объектов, создавая гибкие возможности для сложных интерактивных графических интерфейсов.