原生 VR 模式下未触发屏幕触摸

Screen touch not fired in native VR mode

我必须在 VR 模式下检测屏幕触摸,因为这是 Cardboard 上的按钮产生的结果。 (我有其他代码来检测控制器按钮。)

此代码:

            // mobile and Cardboard controls
        AFRAME.scenes[0].addEventListener('touchstart', function(evt) {
            // console.log('scene touchstart:', evt);
            if (evt.target.classList.contains('a-enter-vr-button')) {
                return;
            }

            if (!state.isFlying) {
                AFRAME.scenes[0].emit('launch', evt);
            } else {
                AFRAME.scenes[0].emit('hover', evt);
            }
        });

点击屏幕时触发,在 Android Firefox 的正常模式和 VR 模式下(但 VR 模式是 polyfilled)。在 Android Chrome 中,它会在正常模式下触发,但不会在 VR 模式下触发(这似乎是原生模式)。

当我侦听 mousedown 或将侦听器添加到 window 时,对于 touchstart 或 mousedown,也会发生相同的行为。

那么,在原生 VR 模式下,我应该监听什么元素上的什么事件?

将事件侦听器添加到 window 或 canvas (AFRAME.scenes[0].canvas)。

window.addEventListener('click', function () { // ... }

window.addEventListener('touchstart', ...)

Chrome 中的 VR 模式有一个虚拟控制器。我最终的解决方案是编写一个组件来检测屏幕点击和控制器按钮: https://www.npmjs.com/package/aframe-button-controls