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

先说问题:浏览器有一个自带原生的获取手机方向的事件方法 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的事件方法。

相关推荐
美团骑手阿豪16 小时前
Unity适配 安卓15+三键导航模式下的 底部UI被遮挡
android·智能手机
一尘之中18 小时前
手机开源系统(LineageOS/PostmarketOS实战)
智能手机·开源·ai写作
千里马学框架1 天前
疑难ANR面试题:crash导致ANR深入剖析
android·智能手机·framework·perfetto·性能·anr·小米汽车
2501_919219042 天前
画册设计尺寸在不同设备(手机/平板)显示差异如何处理?
python·智能手机·电脑
深圳博达智联2 天前
博达智联供水4G控制器方案:厂家集中管控,终端用户手机远程控,运维成本降一半
物联网·智能手机·人机交互
MoonPointer-Byte2 天前
【Python爬虫实战】用 Flet 把爬虫做成手机 App
爬虫·python·智能手机
LOnghas12112 天前
YOLO11-ContextGuideFPN_手机玻璃盖板裂缝缺陷检测技术详解
智能手机
ii_best2 天前
按键精灵安卓/IOS手机助手 × 手机按键 App:1 分钟搞定设备连接(超详细教程)
android·ios·智能手机·自动化·编辑器
Dev7z3 天前
基于 YOLO 的课堂手机使用行为智能检测系统实践
yolo·目标跟踪·智能手机
黄美美分享3 天前
全新升级,小米手机互联服务电脑通用版 V1.1.0.60 新版分享!支持相册/笔记云服务/剪贴板共享!一键同步
笔记·智能手机·电脑