В A-Frame взаимодействие с объектами в 3D-сцене
осуществляется через компонент cursor, который позволяет
отслеживать действия пользователя: нажатие, наведение, уход с объекта, а
также фокусирование на объекте с помощью системы «fusing». Эти события
являются ключевыми для создания интерактивных VR/AR-сцен.
clickСобытие click срабатывает, когда пользователь активирует
объект с помощью курсора. Активация может происходить кликом мыши, тапом
на сенсорном экране или с помощью VR-контроллера.
Пример использования:
<a-entity geometry="primitive: box" material="color: blue"
position="0 1 -3"
event-set__click="_event: click; _target: #box; material.color: red">
</a-entity>
<a-entity id="box"></a-entity>
В данном примере при клике на синий куб его цвет меняется на красный.
Событие click можно привязывать через JavaScript для более
сложной логики:
const box = document.querySelector('#box');
box.addEventListener('click', () => {
box.setAttribute('material', 'color', 'green');
});
Ключевой момент: событие click срабатывает
только после взаимодействия с курсором, если объект находится
под его прицелом.
mouseentermouseenter срабатывает, когда курсор наведен на объект.
Это позволяет визуально подсвечивать объекты или запускать анимации при
наведении.
Пример:
<a-entity geometry="primitive: sphere" material="color: yellow"
position="2 1 -3"
id="sphere">
</a-entity>
const sphere = document.querySelector('#sphere');
sphere.addEventListener('mouseenter', () => {
sphere.setAttribute('material', 'color', 'orange');
});
При наведении на сферу её цвет меняется на оранжевый. Событие
mouseenter полезно для создания эффекта
наведения, который знаком из классических веб-интерфейсов.
mouseleavemouseleave срабатывает, когда курсор покидает объект.
Часто используется совместно с mouseenter для
восстановления исходного состояния объекта.
sphere.addEventListener('mouseleave', () => {
sphere.setAttribute('material', 'color', 'yellow');
});
Вместе с mouseenter это создаёт динамическое поведение:
объект реагирует на курсор, изменяя свои свойства при наведении и
возвращая их при уходе.
fusingFusing — уникальное для VR событие, которое срабатывает
после фиксированного времени наведения курсора на объект. Это особенно
важно для устройств без кнопок, где взаимодействие осуществляется только
взглядом.
Подключение компонента:
<a-entity cursor="fuse: true; fuseTimeout: 2000"></a-entity>
fuse: true — активирует механизм фокусирования.fuseTimeout — время в миллисекундах, необходимое для
срабатывания события.Пример использования события
fusing:
const box = document.querySelector('#box');
box.addEventListener('click', () => {
console.log('Сработало событие fusing или клик');
});
При включенном fuse событие click будет
автоматически срабатывать после установленного времени, имитируя
активацию объекта взглядом.
Особенности fusing:
fuseTimeout можно настраивать для различных объектов,
создавая разное время отклика.Для сложной интерактивности события курсора можно комбинировать:
box.addEventListener('mouseenter', () => box.setAttribute('material', 'color', 'red'));
box.addEventListener('mouseleave', () => box.setAttribute('material', 'color', 'blue'));
box.addEventListener('click', () => console.log('Объект активирован'));
Такой подход позволяет реализовать:
raycaster: он определяет
точку пересечения курсора с объектами сцены и повышает точность
событий.fuseTimeout в зависимости от
сцены: для элементов управления меню — короткое время, для
сложных действий — более длинное.mouseenter
делает интерактивность более наглядной.Эти события образуют основу интерактивных VR-сцен в A-Frame, обеспечивая гибкое управление объектами и создавая эффект присутствия.