原生 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
我必须在 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