关于在浏览器里面获取手机方向的事件

先说问题:浏览器有一个自带原生的获取手机方向的事件方法 deviceorientation : https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent/DeviceOrientationEvent

这个事件里面有个实例absolute 看名字知道意思吧,对就是绝对坐标的意思,如果带了absolute就是用地球绝对坐标,如果不带absolute那么就用的你自己手机设备的相对坐标来参照返回给你当前的aplha,beta,gamma数据;最开始捣鼓了很久发现不同的手机那个位置怎么都不对,直接心态崩了,然后无意中发现的居然还有个带absolute的事件,联想到他的实例熟悉就试了一下,然后就发现了这个大坑。

所以正确的打开方式是使用 deviceorientationabsolute 事件

好了,下面上代码

复制代码
function monitor() {
  //window.DeviceMotionEvent 需使用https 才能拿到这个对象  或者低版本的android机器可以使用http拿到这个陀螺仪设备
  if (process.env.IS_DEV || window.DeviceMotionEvent) {
    //陀螺仪这里使用absolute方法来监听方向  如果不带absolute的事件那么用的是相对于手机自带的坐标系 来返回的参数
    //如果用来absolute的事件那么返回的是相对于地球坐标系的数据
    window.addEventListener(
      'deviceorientationabsolute',
      // eslint-disable-next-line @typescript-eslint/no-unused-vars
      throttle(function (e) {
        // console.log(e.alpha, e.beta, e.gamma);
        // 处理你要处理的事情
        throttlePosition(e);
      }, 300),
      false,
    );
  } else {
    alert('您的手机不支持陀螺仪哦~');
  }
}
复制代码
monitor();

重要的坑说三遍,由于不同的手机可能不一样。一定要用带absolute的事件方法,一定要用带absolute的事件方法,一定要用带absolute的事件方法。

相关推荐
一渊之隔4 小时前
uniapp BLE 开发踩坑:小米手机数据接收截断问题排查全记录
智能手机·uni-app
换元不配限7 小时前
Android 休眠与唤醒完全指南:从手机到 IoT 设备的实战解析
android·物联网·智能手机·alarmmanager·wakelock·workmanager·休眠和唤醒
wulechun11 小时前
基于深度学习的中文自然语言处理工具Jiagu:从原理到实战的开发者指南
智能手机
薛先生_09911 小时前
手机远程控制电脑哪个好用?2026安卓鸿蒙iOS手机远程控制电脑软件横测排名
智能手机·电脑
Henry-SAP11 小时前
阶跃星辰发布智能体手机STEPX Neo
人工智能·智能手机
yikegis11 小时前
手机拍视频太多,内存不够用了怎么办?(怎么压缩视频)
智能手机·音视频
Light6012 小时前
豆包收回了那只“手“,Agent手机开始拼协议
人工智能·智能手机·mcp协议·权限边界·agent手机·appfunctions·工具投毒
wulechun15 小时前
零基础入门数据可视化实战:深度解析wangyapu DataVisual项目的核心架构、组件应用与二次开发全流程指南
智能手机
键道之下1 天前
便携标签机在墨西哥经销体系中的 App 交付责任怎么划分?
人工智能·智能手机·零售·智能硬件·智能硬件出海·硬件出海
m0_380474161 天前
AI 正在离开屏幕:从 AI 眼镜到原生智能体手机,终端入口之争打响
人工智能·智能手机