在IOS中DeviceMotion及DeviceOrientation事件不触发的问题

现象:window.DeviceMotionEvent 是有定义的,但就是不触发 devicemotion 事件;

基本用法:

if (window.DeviceMotionEvent) {
    window.addEventListener('devicemotion', function () {
        var acceleration = event.accelerationIncludingGravity;
        var x = acceleration.x;
        var y = acceleration.y;
        var z = acceleration.z;
        // do your want to do
    }, false);
}

 

解决方案:使用 https 协议可搞定!

以上是2019年5月左右的问题。

——————————————————————————————————————

2020-07-20更新:

 

现在IOS13+以上的版本又失效了,查询一堆文档发现:需要申请权限!

也尝试了网上各位大神写的代码,即:直接通过以下方式:

DeviceMotionEvent.requestPermission().then(function (state) {
    if ('granted' === state) {
       window.addEventListener('devicemotion', function () {
           // do something
       }, false);
    } else {
        alert('apply permission state: ' + state);
    }
}).catch(function(err){
    alert('error: ' + err);
});

代码没有问题,但你会发现会报以下错(依然要在https协议下使用):

NotAllowedError: Requesting device orientation or motion access requires a user gesture to prompt

问题在于,这个事件必须由用户主动触发,具体文档可以在这儿看到:https://w3c.github.io/deviceorientation/#devicemotionevent

具体位置在下面的截图里面了:

然后根据文档所提示,通过用户点击事件来获取用户授权,就成功了,如图:

至于有开发者遇到拒绝后就不再提示授权的问题,目前还不知道怎么解决。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值