2013-07-02 28 views
1

我在JavaScript中使用deviceorientation,我注意到我的Ipad(iOS 6.1)和我的Nexus7(Android 4.2.2)之間的一些區別。正常化設備的定向數據

此代碼不會用Ipad和Nexus7打印相同的數據。

<html> 
    <head/> 
    <body> 
    <button id="calibrate">Calibrate</button> 
    <button id="stop">Stop</button> 
    <button id="play">Play</button> 
    <div id="log"><p></p></div> 
    <script> 
     var log = document.getElementById('log'); 
     var calibrate = false; 
     var calibrateG = 0, calibrateB = 0, calibrateA = 0; 

     var deviceorientation = function(e) { 
     if (calibrate) { 
      calibrateG = e.gamma; 
      calibrateB = e.beta; 
      calibrateA = e.alpha; 
      calibrate = false; 
     } 

     var gamma = parseInt(e.gamma - calibrateG); 
     var beta = parseInt(e.beta - calibrateB); 
     var alpha = parseInt(e.alpha - calibrateA); 

     var p = document.createElement('p'); 
     p.innerHTML = gamma + ' ' + beta + ' ' + alpha; 
     log.insertBefore(p, log.firstChild); 
     } 

     document.getElementById('stop').onclick = function() { 
     window.removeEventListener('deviceorientation', deviceorientation); 
     }; 
     document.getElementById('play').onclick = function() { 
     window.addEventListener('deviceorientation', deviceorientation); 
     }; 
     document.getElementById('calibrate').onclick = function() { 
     calibrate = true; 
     }; 

     window.addEventListener('deviceorientation', deviceorientation); 

    </script> 
    </body> 
</html> 

在啓動Android打印0 0 270和iOS 0 0 0

然後,當我以同樣的方式移動兩個,他們不打印相同的值。

有人能解釋爲什麼,如果有數據標準化的一種方式。

更新#1

我已經嘗試一些校準和我關心的橫向/縱向。 重現,你可以採取上面的代碼,把ipad和nexus7縱向放在你的面前。 校準兩者的值(第一個按鈕)。 然後拿起平板電腦的右角並旋轉它直到平板電腦達到90度。 平板電腦應位於左側。

在Android上,gamma從0變爲-80,然後跳轉到270. 在IOS上,gamma從0跳到-180,沒有任何跳躍。

回答

1

如果你需要所有三個應用程序或遊戲,你可以提示用戶〜「直接握住設備」並記錄初始值,然後獲得這些值的偏移量(增量)。您甚至可以將初始校準保存到localStorage,因此不需要重複。

如果您只需要橫向或縱向,只需將window.innerWidth與window.innerHeight進行比較即可。

+0

我已經盡力校準值,我關心的風景肖像。我更新了我的文章,也許它更清晰。 – Charles

+0

@charles - 忘記alpha,beta,gamma,只需使用簡單的//// var orientation = window.innerWidth> window.innerHeight? 「橫向縱向」; //// –

+0

我想知道用戶何時翻轉/傾斜/搖動手機,所以我需要alpha,beta,gamma。隨着「我關心風景畫」,我想說我已經知道風景/肖像影響alpha,beta,gamma。 – Charles

3

Full Tilt JS規範化Android和iOS設備之間實現的數據值。它還確保設備的定位數據在用戶旋轉屏幕時保持一致。

This article提供了Full Tilt JS庫中使用的一些技術的摘要。

免責聲明:我的文章和圖書館均高於的作者。請嘗試並直接在Github項目上報告任何問題。