A-Frame开发:如何检测用户退出AR模式的对应事件或属性
A-Frame AR模式退出检测实现方案
可订阅的触发事件
- A-Frame的
<a-scene>组件原生提供exit-vr事件,不管是用户主动按返回键、退出全屏,还是系统强制中断AR会话,只要AR会话结束就会触发该事件。 - 可以配合
enter-vr事件标记当前会话类型,避免VR模式退出时误触发你的3D模式适配逻辑。
示例代码:
const sceneEl = document.querySelector('a-scene'); // 进入会话时标记是否为AR模式 sceneEl.addEventListener('enter-vr', () => { sceneEl.dataset.isARSession = sceneEl.is('ar-mode') ? 'true' : 'false'; }); // 监听会话退出事件 sceneEl.addEventListener('exit-vr', () => { if (sceneEl.dataset.isARSession === 'true') { // 这里执行你的相机参数重置、普通3D模式切换逻辑 resetCameraConfig(); sceneEl.dataset.isARSession = 'false'; } });
可查询的状态属性
你可以随时调用sceneEl.is('ar-mode')获取当前是否处于AR运行状态,该属性为布尔值,AR退出后会自动变为false,你也可以用它做状态校验的兜底判断。
极端场景兜底方案
如果遇到部分设备上系统强制中断会话没有触发exit-vr的极端情况,可以绑定WebXR原生会话的end事件做二次兜底:
sceneEl.addEventListener('enter-vr', () => { if (sceneEl.xrSession && sceneEl.is('ar-mode')) { sceneEl.xrSession.addEventListener('end', () => { // AR会话彻底结束时执行适配逻辑 resetCameraConfig(); }); } });
内容的提问来源于stack exchange,提问作者earok
相关产品推荐
相关产品推荐

