H5 ios 重力感应和陀螺仪不起作用解决办法

3,149 阅读1分钟

1.项目的地址不是以https开头的,改为https开头即可;

 2.若改为https之后还是没有效果,那么要看一下你的移动端系统是否为IOS13+ 之前在IOS12.4的时候,使用shake.js这个封装的api还是有效果的,突然拿了一部IOS13+的手机测试了一下发现压根就没有触发shake.js里面封装的devicemotion事件,这个事件绑定的函数接收一个DeviceMotionEvent对象类型的参数描述发生的动作。 从iOS 12.2开始,苹果出于隐私问题决定,默认情况下,浏览器对设备运动和方向事件的访问权限处于关闭状态。现在,也许他们意识到这可能是一个错误,因此在iOS 13中,他们更改了权限请求行为,类似于请求相机权限的方式。

 因此,在IOS13+的移动端中,需要在DeviceMotionEvent上调用requestPermission这个方法,该方法请求用户当前来源的权限以显示通知,然后根据用户的不同选择,触发不同的状态【granted(被授予),denied(被拒绝) 或者default(默认)】,并返回一个Promise对象。PS:requestPermission只能在用户手势(例如单击)上调用。相关代码为: 

function onClick() { if (typeof DeviceMotionEvent.requestPermission === 'function') {
      DeviceMotionEvent.requestPermission()
        .then(permissionState => {
          if (permissionState === 'granted') {
            window.addEventListener('devicemotion', () => {});
          }
        })
        .catch(console.error);
    } else {
      // handle regular non iOS 13+ devices
    }
  }