IOS無法搖一搖,附完美解決文件。


 

2021-02-23日前, 下載過文件的同學,請在文末重新下載、更新,

本次修改,更新了一處IOS版本判斷不嚴謹的代碼邏輯,

 

很久沒搞搖一搖了, 上次還是IOS 11 的時候需要  https ,

 

沒想到 IOS 13.3 又來玩大家一把。

 

直接上代碼 和 文件

需要自取

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript" id="temp">document.write('<meta name="viewport" content="width=750, initial-scale='+window.screen.width/750+',user-scalable=no, target-densitydpi=device-dpi">');
console.logF("%c math.yang@heymeo.com ",'background: #000;color: #FFF');</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>    body{margin:0; background:#333; overflow:hidden;}.abs{position:absolute;}html {-webkit-tap-highlight-color:rgba(0,0,0,0);}.ipt{background-color:transparent; border-color:transparent;-webkit-appearance: none;outline: none;}</style>
<title>無標題文檔</title>
</head>

<body>
<div id="log" class="abs" style="width:710px; left:20px; height:1000px; font-size:24px; line-height:34px; color:#FFF; font-family:Arial, Helvetica, sans-serif"></div>

<div id='fkIOS'  class="abs" style="display:none;">
    <div class="abs" style=" top:400px; left:150px; width:450px; height:220px; background-color:#FFF; text-align:center; color:#333; font-size:30px; border-radius:15px; padding-top:40px;font-family:Arial, Helvetica, sans-serif">
        搖一搖需要授權使用<br>請點擊<strong>允許</strong>
        <br>
        <br>
        <div class="abs" type="button" style="width:210px; left:120px; color:#333; background:#E2E2E2; border-radius:10px; line-height:60px; height:60px;font-size:34px;font-family:Arial, Helvetica, sans-serif" onclick="ios13granted();">允許</div>
    </div>
    
</div>
</body>
</html>
<script src="zepto.min.js"></script>
<script>




//調試使用-------↓↓↓↓↓
var logCount=0
function logF(str)
{
    logCount++
    $("#log").append("<br>"+logCount+" "+str)
}
//調試使用-------↑↑↑↑↑




window.onload=function()
{
    addShakeEvent();
}

function addShakeEvent()
{    
    addCheckShake();

    logF("check system")
    //檢查系統版本
    var ua = navigator.userAgent.toLowerCase();
    if(ua.indexOf("like mac os x") > 0)
    {
        logF("ios")
        var reg = /os [\d._]*/gi ;
        var verinfo = ua.match(reg) ;
        var version = (verinfo+"").replace(/[^0-9|_.]/ig,"").replace(/_/ig,".");
        if (Number(version)>=13.3) 
        {  
            //對13.3以后的版本處理,包括13.3,
            logF("IOS 13.3+")            
            DeviceMotionEvent.requestPermission()
            .then(permissionState => {                
                if (permissionState == 'granted') {
                     logF("已授權")
                     logF("可以搖一搖了0")
                     window.addEventListener('devicemotion', () => {});
                }
                else
                {
                    //denied
                     logF("歷史授權已被拒絕過<br>后台退出APP再次進入即可彈出授權框<br>20200931測試微信\釘釘\微博'")
                }
            }).catch((err)=>
            {
                logF("彈出自定義提示框")
                $("#fkIOS").css("display","block")
            })  
        } 
        else
        {
            logF("IOS 13.2-")
            logF("可以搖一搖了1") ;          
        }
    }
    else
    {  
        logF("其他系統")
        logF("可以搖一搖了2")   
    }
}


function ios13granted() 
{
    //必須用戶點擊事件內觸發,才能彈出授權框
    $("#fkIOS").css("display","none")
    
    logF("彈出IOS系統授權")
    if (typeof DeviceMotionEvent.requestPermission === 'function') 
    {
        DeviceMotionEvent.requestPermission().then((permissionState) => 
        {
            if (permissionState === 'granted') 
            {
                logF("授權成功")
                window.addEventListener('devicemotion', () => {});
                logF("可以搖一搖了3")
            }
            else
            {
                 logF("授權被拒絕<br>后台退出APP再次進入即可彈出授權框<br>20200931測試微信\釘釘\微博'")
            }
        }).catch((error) =>
        {
              logF("奇葩錯誤"+JSON.stringify(error))
        })
    } 
    else 
    {
        logF("!ios 2")
        logF("可以搖一搖了4")
    } 
}



function addCheckShake()
{
    var SHAKE_THRESHOLD = 4000;
    var last_update = 0;
    var x=0,y=0,z=0,last_x=0,last_y=0,last_z=0;
    
    function deviceMotionHandler(eventData) {
        var acceleration = eventData.accelerationIncludingGravity;
        var curTime = new Date().getTime();
        if ((curTime - last_update) > 60) {
            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;
            //$("#debug").val(x.toFixed(2) +"    "+last_x.toFixed(2)+"     "+y.toFixed(2)+"     "+last_y.toFixed(2)+"     "+z.toFixed(2)+"     "+last_z.toFixed(2))
            if (speed > SHAKE_THRESHOLD) 
            {
                alert("你搖了")
            }
            last_x = x;
            last_y = y;
            last_z = z;
        }
    }    
    //
    window.addEventListener('devicemotion', deviceMotionHandler, false);      
}
</script>

 

掃碼體驗:

 

需要Https, 本地無效

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM