问题与用例:
在 WebXR 模式下,鼠标事件在浏览器内部被禁用或屏蔽,显然是因为 WebXR 开发人员认为您不想要或不能在 VR/AR 中使用鼠标。
但他们错了,假设太多,尤其是最终用户不能做的事情总是错误的。鼠标是一个指针,您可以握在手中而不是将它们拖到表面上,提供连续数据并且可以在许多 WebXR 案例中使用,但它们的决定使它们无法使用。
更糟糕的是,Web API 中存在一个错误,使得尽管 MDN 的兼容性图表在所有移动浏览器中都无法锁定指针,即使在非 WebXR 操作中也是如此,这进一步破坏了此类低成本设备的使用,包括在使用自定义 VR 代码时(polyfills)指针锁在 Android 浏览器上不起作用(官方演示)
我试过的
我尝试了通常的鼠标事件功能,例如:
//or document.addEventListener()
element.addEventListener('mousemove', (event)=>{
mouseX = event.pageX;
mouseY = event.pageY;
});
或者:
window.onmousemove = (event) => {
mouseX = event.movementX;
mouseY = event.movementY;
}
或者:
document.addEventListener( 'pointermove', onPointerMove );
function onPointerMove (event) {
pointer.x = event.clientX;
pointer.y = event.clientY;
}
我注意到,每次单击指针时,我都会获得该瞬间的坐标(但不是在移动期间),因此我尝试使用:
element.click()
在每一帧上,但它也不起作用,显然是因为点击是“合成的”。
我还尝试将焦点放在每一帧的窗口或元素上。
element.focus();
显然事情没那么简单。也许解决方案就在 webvr/webxr polyfills 的某个地方,它们是在最终 API 被广泛采用之前开发的。
有任何想法吗?