Анимация кадра при наведении курсора мыши (mouseleave, mouseenter)

#javascript #aframe #virtual-reality #webvr

#javascript #aframe #виртуальная реальность #webvr

Вопрос:

У меня есть сцена, в которой есть объекты mouseenter, которые запускают действия с другими объектами:

 <a-entity class="hover" position="1.3 1.5 0" rotation="0 90 0">
    <a-entity mixin="hoverbox"></a-entity>
    <a-obj-model src="#profile1" scale="0.01 0.01 0.01" material="height: 512; width: 512" mixin="skybox">
        <a-animation attribute="rotation" dur="10000" easing="linear" fill="forwards" to="0 360 0" repeat="indefinite"></a-animation>
        <a-animation attribute="position" dur="300" to="0 0 -.5" begin="hoveron"></a-animation>
        <a-animation attribute="position" dur="300" to="0 0 0" begin="hoveroff"></a-animation>
    </a-obj-model>
</a-entity>
  

Это смесь hoverbox:

 <a-mixin id="hoverbox" class="hoverbox" material="color:#fff; opacity:.5;" geometry="primitive: sphere; radius: .45;"></a-mixin>
  

И этот javascript, прикрепленный к нему:

 var sceneEl = document.querySelector('a-scene');
var hoverEls = sceneEl.querySelectorAll('.hover');
for(var i = 0; i < hoverEls.length; i  ) {
    var hoverEl = hoverEls[i];
    hoverElBox = hoverEl.querySelector('a-entity');
    hoverElBox.addEventListener('mouseenter', function(evt) {
        // evt.stopPropagation();
        console.log('mouseenter', evt);
        evt.target.nextElementSibling.emit('hoveron');
    }, true);
    hoverElBox.addEventListener('mouseleave', function(evt) {
        // evt.stopPropagation();
        console.log('mouseleave', evt.target.parentNode);
        evt.target.nextElementSibling.emit('hoveroff');
    }, true);
}
  

Это вызывает изменение положения элемента, когда пользователь наводит курсор на сферу «hoverbox». Это также вызывает возврат в нормальное положение, когда курсор покидает hoverbox.

Элемент курсора выглядит следующим образом:

 <a-entity cursor="fuse:true, fuseTimeout: 50;" raycaster="far: 10; objects: .hoverbox" />
  

Таким образом, он не генерирует событие для других объектов.

Тем не менее, поведение немного глючит. Иногда, когда курсор удаляется от сферы, событие ‘hoveroff’ не запускается, а в других случаях сфера просто не регистрирует mouseenter.

Кто-нибудь знает, как заставить это работать?

Полный код смотрите здесь: http://vr.dco.rocks /

Ответ №1:

Это было исправлено в главной ветке A-Frame https://github.com/aframevr/aframe/commit/e4900e16ea9228af39d2a4fef6798393e79bd82a хотя в коде все еще есть несколько перегибов.

A-Frame 0.2.0 может быть или не быть более надежным?

Комментарии:

1. С тех пор я перешел к использованию raycaster, у которого были те же проблемы (но реже). Это тоже автоматически исправляется?

2. Также. является ли это фреймом 0.3.1?