美文网首页
iOS 12.2+ 与 iOS 13 h5无法开启重力感应(摇一

iOS 12.2+ 与 iOS 13 h5无法开启重力感应(摇一

作者: cinoliu | 来源:发表于2020-06-15 18:14 被阅读0次

    一、问题简介

    经测试,苹果手机ios13.3.1系统版本将影响到重力感应类H5的体验,特别是跟重力感应功能相关的效果:包括摇一摇触发,重力感应控制图片移动,layer 容器重力感应部分、一镜到底、全景容器组件中需要重力感应控制的部分、陀螺仪组件。

    二、详细说明

    苹果手机微信打开H5,主要借助苹果自带的Safari浏览器。最新苹果手机系统版本,限制了Safari浏览器获取用户感应器信息,只有经过用户同意才可获取,即没有经过H5打开用户的同意,H5没有权限使用重力感应功能。

    三、解决方案

    原本的解决方案失效,苹果加强了重力感应权限部分的控制,必须让用户通过点击元素的方式来获取当前用户重力感应权限授权。

    <!DOCTYPE html>

    <html lang="en">

    <head>

        <meta charset="UTF-8">

        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <title>Document</title>

    </head>

    <body onload="init()">

        <button id="btn">点击授权</button>

        <script type="text/javascript">

            document.getElementById("btn").addEventListener("click", function() {

                if (typeof DeviceMotionEvent.requestPermission === 'function') {

                    DeviceMotionEvent.requestPermission()

                        .then(permissionState => {

                            if (permissionState === 'granted') {

                                window.addEventListener('devicemotion', deviceMotionHandler, false);

                            }

                        })

                        .catch((err) => {

                            alert("用户未允许权限");

                        });

                } else {

                    alert("not found")

                }

            })

            var SHAKE_THRESHOLD = 3000;

            var last_update = 0;

            var x = y = z = last_x = last_y = last_z = 0;

            function init() {

                if (window.DeviceMotionEvent) {

                    if (typeof DeviceMotionEvent.requestPermission === 'function') {

                        DeviceMotionEvent.requestPermission()

                            .then(permissionState => {

                                if (permissionState === 'granted') {

                                    window.addEventListener('devicemotion', deviceMotionHandler, false);

                                }

                            })

                            .catch((err) => {

                                alert("用户未允许权限");

                            });

                    } else {

                        window.addEventListener('devicemotion', deviceMotionHandler, false);

                    }

                } else {

                    alert('not support mobile event');

                }

            }

            function deviceMotionHandler(eventData) {

                var acceleration = eventData.accelerationIncludingGravity;

                var curTime = new Date().getTime();

                if ((curTime - last_update) > 100) {

                    var diffTime = curTime - last_update;

                    last_update = curTime;

                    x = acceleration.x;

                    y = acceleration.y;

                    z = acceleration.z;

                    var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;

                    if (speed > SHAKE_THRESHOLD) {

                        alert("摇动了");

                    }

                    last_x = x;

                    last_y = y;

                    last_z = z;

                }

            }

        </script>

    </body>

    </html>

    相关文章

      网友评论

          本文标题:iOS 12.2+ 与 iOS 13 h5无法开启重力感应(摇一

          本文链接:https://www.haomeiwen.com/subject/kpuhxktx.html