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

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

相关推荐
nono牛1 天前
MTK平台详解`ro.boot.serialno` 的实现流程 adb devices输出序列号
adb·智能手机
JoyCong19981 天前
手机、平板、电脑如何投屏画面到电视?ToDesk远程控制TV版教程分享
智能手机·电脑
Digitally1 天前
如何用5种实用方法将电脑上的音乐传输到安卓手机
android·智能手机·电脑
wanhengidc1 天前
云手机的基本原理
运维·服务器·游戏·智能手机·云计算
AIminminHu1 天前
系列文章<八>(从LED显示屏的Gamma过曝问题问题到手机影像):从LED冬奥会、奥运会及春晚等大屏,到手机小屏,快来挖一挖里面都有什么
智能手机·gamma校正·gamma·gamma过曝
飞睿科技2 天前
超越蓝牙与Wi-Fi,UWB技术如何解锁手机下一波创新浪潮?
嵌入式硬件·物联网·智能手机·uwb
wanhengidc2 天前
云手机畅玩 梦幻西游
运维·服务器·arm开发·智能手机·自动化
夏婵语冰2 天前
手机轻松控制电脑:局域网内远程操控B站/抖音实战教程
智能手机·手机轻松控制电脑·局域网内远程操控b站·局域网内远程操控抖音
程序员杰哥2 天前
Fiddler抓包手机和部分app无法连接网络问题
自动化测试·软件测试·python·测试工具·智能手机·fiddler·测试用例
电化学仪器白超2 天前
④使用 PPTSYNC.exe 与华为手机拍照制作 GIF 动画
服务器·华为·智能手机