2013-07-02 3 views
1

자바 스크립트로 기기 방향을 사용하고 있는데 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> 

시작 안드로이드 인쇄시 0 0 270 0 0

아이폰 OS 0 그런 다음, 그들은 같은 값을 인쇄되지 않습니다.

누군가가 이유를 설명하고 데이터를 표준화하는 방법이 있는지 알 수 있습니까?

업데이트 # 1

은 이미 일부 교정을 시도하고 나는 가로/세로 걱정. 코드를 재현하려면 ipad와 nexus7을 앞에 세로로 넣어주세요. 둘 다의 값을 보정하십시오 (첫 번째 버튼). 그런 다음 태블릿의 오른쪽 모서리를 잡고 태블릿이 90도에 도달 할 때까지 회전하십시오. 태블릿은 왼쪽에 있어야합니다.

Android에서는 감마가 0에서 -80으로 이동 한 다음 270으로 점프합니다. IOS에서는 감마가 0에서 -180으로 점프하지 않습니다.

답변

1

응용 프로그램이나 게임에서이 세 가지가 모두 필요한 경우 ~ 사용자에게 "장치를 곧게 잡아라"고 묻고 초기 값을 기록한 다음 해당 값의 오프셋 (델타)을 가져올 수 있습니다. 초기 캘리브레이션을 localStorage에 저장할 수도 있으므로 반복 할 필요가 없습니다.

가로 또는 세로가 필요한 경우 window.innerWidth를 window.innerHeight 또는 이와 동등하게 간단하게 비교하면됩니다.

+0

나는 이미 값을 보정하려고하는데 가로 세로에 관심이 있습니다. 내 게시물을 업데이트했을 수도 있습니다. – Charles

+0

@charles - 알파, 베타, 감마를 잊어 버리고 ////와 같은 간단한 것을 사용하십시오. var orientation = window.innerWidth> window.innerHeight? "풍경": "초상화"; //// –

+0

사용자가 전화를 뒤집기/뒤집기/흔들기를 알고 싶습니다. 따라서 알파, 베타, 감마가 필요합니다. "나는 풍경 사진에 관심이 있습니다"라고 말하면서 풍경/초상화가 알파, 베타, 감마에 영향을 준다는 것을 이미 알고 있다고 말하고 싶었습니다. – Charles

3

Full Tilt JS은 Android 및 iOS 기기 지향 구현간에 데이터 값을 표준화합니다. 또한 사용자가 화면을 회전 할 때마다 장치 방향 데이터가 일관성있게 유지됩니다.

This article은 Full Tilt JS 라이브러리에 사용 된 몇 가지 기술에 대한 요약을 제공합니다.

면책 조항 : 저는 위의 기사와 라이브러리의 저자입니다. Github 프로젝트에 직접 문제를보고 해보십시오.