2015-01-20 6 views
0

자바 스크립트에서 deviceorientation 이벤트를 사용하여 자이로 스코프 데이터를 검색하고 있습니다. 지금까지 완벽하게 작동하는 iOS 기기에서이를 테스트했습니다. 오늘 저는 Chrome 39를 실행하는 Microsoft Surface Pro 2 태블릿에서 동일한 코드를 시험해 보았습니다. 매우 이상한 값을 얻었습니다.Microsoft Surface Pro 2의 JavaScript 장치 방향 : 알파와 감마 값을 전환했습니다.

조금만 살펴보면 this page에서 테스트 할 때 알 수 있듯이 알파와 감마 값이 Surface Pro에서 전환 된 것으로 보입니다.

테이블에 평평하게 놓고 장치를 돌리면 Surface Air가 감마값을 변경하는 동안 iPad Air의 알파 값이 변경됩니다. 장치를 집을 때 (테이블에 90도 각도로 서 있기 때문에) iPad에서 90의 감마 값과 Surface Pro에서 90의 알파 값을 얻습니다.

이러한 이벤트가 어떻게 작동해야하는지에 대한 HTML5Rocks의 설명에 따르면 iPad는 올바른 작업을 수행하지만 Surface Pro는 그렇지 않습니다.

제 질문은 다음과 같습니다. 알려진 문제입니까? 이 문제를 감지하거나 해결할 방법이 있습니까?

해결 과정 : 나는 현재이를 위해 다음과 같은 해결 방법을 사용하고

:

var alphaGammaFlipped = false; 
window.addEventListener("deviceorientation", function(e) { 
    if (e.alpha < 0 || e.gamma > 180) alphaGammaFlipped = true; 

    var alpha = e.alpha; 
    var beta = e.beta; 
    var gamma = e.gamma; 
    if (alphaGammaFlipped) { 
     var temp = alpha; 
     alpha = gamma; 
     gamma = temp; 
    } 

    // Do something with alpha, beta, gamma... 
}); 

이 코드는 -180 사이 여야 알파는 0과 360 및 감마 사이 여야한다는 가정을 사용합니다 그 중 하나가 범위를 벗어난다면 이것은 아마 뒤집 혔을 것입니다. 분명히 이것은 단지 해결 방법 일 뿐이며 값은 0과 180 사이에 머물러있는 한 잘못 될 것입니다. 누군가 더 좋은 점이 있다면 기쁠 것입니다.

+0

확실하지 (나는 ... 인터넷 익스플로러 11에는 반전이 없었 것으로 나타났습니다) iOS에서 안드로이드까지 ... – dandavis

+0

내가 말할 수는 없지만 근처에 안드로이드 장치가 없지만 다음 주에 테스트하고 다시보고 할 수 있습니다. – BlackWolf

답변

0

필자의 경우 동일한 설정 (Surface Pro 2 + javascript deviceorientation)을 사용하는 경우 세 개의 각도는 역순으로입니다.

이 문제를 해결을 위해 나는 그렇게 :

false_alpha = gamma 
false_beta = alpha 
false_gamma = beta 

이 값이 다를 같은 방법으로하면,하지만