吐血修复 | IOS重力感应失效,DeviceMotion及DeviceOrientation事件不触发

                                                                                点击上方收藏,“设为星标

                                                                             加“星标★”,你想看的每天都有

项目中有摇一摇功能,但是发现:

window.DeviceMotionEvent 是有定义的,但就是不触发 devicemotion 事件。

导致了手机无法使用重力感应功能,代码如下:

吐血修复 | IOS重力感应失效,DeviceMotion及DeviceOrientation事件不触发

经过查阅后知晓,要想使用重力感应,必须满足下面两个条件:

  1. 重力感应需要使用https协议,http下不工作
  2. 在IOS13+系统,苹果为了手机的安全性,导致重力感应需要用户主动进行触发后才可以正常使用

这就涉及到苹果陀螺仪的授权,授权代码如下:

吐血修复 | IOS重力感应失效,DeviceMotion及DeviceOrientation事件不触发

  • 苹果授权时候,会弹出comfirm弹窗,确认是否授权重力感应,暂时有三个返回值。
  •  这里需要注意,如果用户取消了授权,将在短时间内无法再次授权使用,因此可以在授权前进行提示,提高用户体验性
  • 目前确认主动触发的事件可以是click,touch等

在这里分享一个前端插件库:orienter.js

该插件将重力感应的事件进行了兼容封装,使得开发者更好更方便的调用重力感应。使用方式如下:

吐血修复 | IOS重力感应失效,DeviceMotion及DeviceOrientation事件不触发

而自从IOS升级13+系统后,你要区分手机系统,进行不同的操作了。

小F自己在项目中进行了二次简单的兼容封装,大概流程如下,可做参考:

吐血修复 | IOS重力感应失效,DeviceMotion及DeviceOrientation事件不触发

手机线上体验:

https://hd.693975.com/huodong/orienter

orienter这款插件挺好用,但是普及不高,导致网上并没有可用的cdn链接,需要自己下载后上传到服务器:

链接:https://pan.baidu.com/s/1lu2Scuw62yS6flhClo5y1Q 

提取码:9t76