A-Frame предоставляет гибкий механизм управления анимациями через
события, что позволяет запускать, приостанавливать и
возобновлять анимации в ответ на взаимодействия пользователя или
программные триггеры. Для управления анимациями применяются атрибуты:
startEvents, pauseEvents,
resumeEvents.
startEvents – задаёт одно или
несколько событий, при которых анимация начинается.pauseEvents – задаёт события, при
которых анимация приостанавливается.resumeEvents – задаёт события для
возобновления приостановленной анимации.Каждый из этих атрибутов может содержать одно или несколько имён событий через пробел, что позволяет комбинировать различные триггеры.
Атрибут startEvents определяет, какое событие запустит
анимацию. Пример базового использования:
<a-box position="0 1 -5" color="red"
animation="property: rotation; to: 0 360 0; dur: 2000; loop: true; startEvents: click">
</a-box>
В этом примере вращение куба начинается только после события
click. Можно указать несколько событий, разделяя их
пробелами:
<a-box animation="property: rotation; to: 0 360 0; dur: 2000; startEvents: click mouseenter">
</a-box>
Здесь вращение начнётся как при клике, так и при наведении курсора.
Для временной остановки анимации используется
pauseEvents. Это полезно, когда требуется динамически
управлять сценой. Пример:
<a-box animation="property: rotation; to: 0 360 0; dur: 5000; loop: true; startEvents: click; pauseEvents: mouseleave">
</a-box>
Анимация запускается по клику и приостанавливается, когда курсор
покидает объект (mouseleave). Можно задать несколько
событий через пробел:
pauseEvents: mouseleave touchend
В этом случае анимация будет приостанавливаться и при уходе курсора, и при завершении касания на сенсорных устройствах.
Атрибут resumeEvents позволяет возобновить ранее
приостановленную анимацию. Он применяется совместно с
pauseEvents:
<a-box animation="property: rotation; to: 0 360 0; dur: 5000; loop: true; startEvents: click; pauseEvents: mouseleave; resumeEvents: mouseenter">
</a-box>
Теперь анимация куба начнётся по клику, приостанавливается при уходе курсора и возобновляется при повторном наведении.
A-Frame допускает комбинирование нескольких анимаций и событий для одного объекта:
<a-sphere position="0 1 -3" radius="1.25" color="#EF2D5E"
animation="property: scale; to: 2 2 2; dur: 1000; startEvents: mouseenter; pauseEvents: mouseleave; resumeEvents: mouseenter"
animation__rotation="property: rotation; to: 0 360 0; dur: 3000; loop: true; startEvents: click">
</a-sphere>
Здесь используются две анимации с разными событиями: одна управляет масштабом через наведение мыши, вторая — вращением по клику.
pauseEvents и
resumeEvents применяются только к активной анимации. Если
анимация не запущена, resumeEvents не вызовет её.loop.Для более гибкого управления можно создавать пользовательские события через Jav * aScript:
const box = document.querySelector('a-box');
// Запуск анимации через событие
box.emit('customStart');
// Приостановка
box.emit('customPause');
// Возобновление
box.emit('customResume');
Соответственно, атрибуты в HTML будут выглядеть так:
<a-box animation="property: rotation; to: 0 360 0; dur: 3000; loop: true; startEvents: customStart; pauseEvents: customPause; resumeEvents: customResume"></a-box>
Это позволяет интегрировать анимации с логикой приложения, реакциями на пользовательский интерфейс или событиями от других компонентов.
Анимации через события легко комбинируются с другими компонентами
A-Frame, такими как cursor, raycaster и
кастомными системами. Например, можно запускать анимацию при пересечении
луча курсора и останавливать её при выходе из зоны объекта.
<a-box position="0 1 -5" color="blue"
animation="property: position; to: 0 2 -5; dur: 1000; startEvents: raycaster-intersected; pauseEvents: raycaster-intersected-cleared"></a-box>
startEvents для запуска анимации по
пользовательским действиям или программным триггерам.pauseEvents и resumeEvents для
динамического контроля анимаций без их перезапуска.emit, чтобы не привязываться к стандартным
DOM-событиям.Эти механизмы делают анимации в A-Frame гибкими и легко интегрируемыми в интерактивные 3D-сцены, позволяя управлять поведением объектов на лету и создавать сложные сценарии взаимодействия.