2015-01-20 1 views
0

Я использую событие deviceorientation в JavaScript для получения данных гироскопа. До сих пор я тестировал это на устройствах iOS, которые отлично работали. Сегодня я попробовал тот же код на планшете Microsoft Surface Pro 2 под управлением Chrome 39 и заметил, что получаю довольно странные значения.JavaScript deviceorientation на Microsoft Surface Pro 2: изменено значение альфа и гамма

После изучения этого, кажется, что значения альфа и гамма включены в Surface Pro, как это видно при тестировании на this page.

Когда я лежал на столе и вращал устройство, мой iPad Air меняет значение альфа, а Surface Pro изменяет значение гаммы. Когда вы поднимаете устройство (поэтому он стоит под углом 90 градусов к таблице), я получаю гамма-значение 90 на iPad и альфа-значение 90 на Surface Pro.

Я полагаю, согласно описанию, приведенному в 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... 
}); 

Этот код использует предположение о том, что альфа должна находиться в пределах от 0 до 360 и гамма должна быть в пределах от -180 до 180. Если один из них выходит за пределы, это означает, что они, вероятно, перевернуты. Очевидно, что это всего лишь обходное решение, а также значения будут неправильными, если оба остаются между 0 и 180. Если у кого-то есть что-то лучше, я буду рад.

+0

не уверен, точно так же, но значения изменяются от iOS для Android также ... – dandavis

+0

У меня нет устройства для Android, поэтому я не могу сказать, но я могу проверить на следующей неделе и сообщить обратно – BlackWolf

ответ

0

В моем случае с той же конфигурацией (Surface Pro 2 + javascript deviceorientation), три угла обращены в обратном направлении.

Для исправить это я сделать это:

false_alpha = gamma 
false_beta = alpha 
false_gamma = beta 

(я заметил, что не было никакой инверсии с Internet Explorer 11 ...)

Смежные вопросы