Я использую событие 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. Если у кого-то есть что-то лучше, я буду рад.
не уверен, точно так же, но значения изменяются от iOS для Android также ... – dandavis
У меня нет устройства для Android, поэтому я не могу сказать, но я могу проверить на следующей неделе и сообщить обратно – BlackWolf