Надеюсь, это не слишком поздно, но не разочаровывает, что Safari для iOS 4.2+ зарегистрирует DeviceOrientationEvent на iPhone 3GS (или других устройствах без гироскопа)?
ВнизуЛиния, DeviceOrientation не работает с iPhone 3GS.Но, как кто-то упомянул, DeviceMotionEvent работает, но вы должны получать доступ к данным о событиях иначе, чем с устройством с гироскопом (глупо, я знаю!).
Первый шаг: я добавил переменную вмикширование для определения того, действительно ли OrientationEvent запускало какие-либо ненулевые данные (как если бы существовал гироскоп).
var canHandleOrientation;
if (window.DeviceOrientationEvent) {
window.addEventListener("deviceorientation", handleOrientation, false);
}
function handleOrientation(event){
console.log("Orientation:" + event.alpha + ", " + event.beta + ", " + event.gamma);
canHandleOrientation = event; // will be either null or with event data
}
Теперь вы знаете, действительно ли событие имеет данные гироскопаили нет!Поэтому, если вы хотите использовать по умолчанию что-то другое (например, window.DeviceMotionEvent), вы можете использовать условное выражение.
if (!canHandleOrientation) {
console.log("There is no gyroscope")
}
Я проверял это на Mobile Safari для iPhone 3GS (без гироскопа) и iPad 2 (гироскоп)и Chrome на моем Macbook Pro (гироскоп).Кажется, работает.
Теперь, если вы хотите получить данные DeviceMotionEvent в качестве альтернативы, если данные ориентации недоступны, то ...
if (window.DeviceMotionEvent && !canHandleOrientation) {
window.addEventListener('devicemotion', handleMotion, false);
}
function handleMotion(event){
if(event.acceleration){
//requires a gyroscope to work.
console.log("Motion Acceleration: " + event.acceleration.x + ", " + event.acceleration.y + ", " + event.acceleration.z);
}
else{
//this is for iPhone 3GS or a device with no gyroscope, and includes gravity.
console.log("Motion AccelerationGravity: " + event.accelerationIncludingGravity.x + ", " + event.accelerationIncludingGravity.y + ", " + event.accelerationIncludingGravity.z);
}
}
Это должно охватывать ваши базы длябольшинство устройств с браузером WebKit ... Я надеюсь.Не тестировали его на любых устройствах Android.
Следует отметить, что каждое событие возвращает разные числа, поэтому вам, возможно, придется поработать над их нормализацией.Но это основы того, как вы к ним обращаетесь.
Дайте мне знать, если это поможет!