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

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

相关推荐
wanhengidc1 天前
服务器都有哪些优缺点?
运维·服务器·科技·智能手机·云计算
2501_915106321 天前
Charles抓包怎么用 Charles抓包工具详细教程、网络调试方法、HTTPS配置与手机抓包实战
网络·ios·智能手机·小程序·https·uni-app·webview
养乐多q.♡1 天前
scrcpy 设置手机熄屏后不影响投屏
scrapy·智能手机·手机控制
wanhengidc1 天前
云手机如何实现资源优化?
运维·服务器·科技·游戏·智能手机
xinxinhenmeihao1 天前
手机socks5代理如何使用?电脑怎么配置http代理?
网络协议·http·智能手机
晚霞的不甘1 天前
实战:从零构建一个支持手机、手表与车机的 Flutter 全场景健康应用
flutter·智能手机
wanhengidc1 天前
云手机的不足之处有哪些?
运维·服务器·科技·智能手机·云计算
低调小一1 天前
从手机 GPS 到厘米级定位:一辆卡丁车的“定位进化史”
智能手机
御控工业物联网1 天前
工业网关新玩法:手机变“移动触摸屏”,局域网内远程操控PLC
物联网·智能手机·自动化·数据采集·plc·远程控制·远程操控plc
程楠楠&M1 天前
h5页面 调用手机,pda摄像头
智能手机·h5·摄像头·vue3.0