Надеюсь, это не слишком поздно, но разве это не разочаровывает то, что Safari для iOS 4.2+ зарегистрирует DeviceOrientationEvent на iPhone 3GS (или на других устройствах без гироскопа)?
Нижняя линия, DeviceOrientation не работает с iPhone 3GS. Но, как уже упоминалось, DeviceMotionEvent работает, но вам нужно получить доступ к данным события по-другому, чем с устройством с гироскопом (глупым я знаю!).
Первый шаг: я добавил переменную в микс, чтобы зафиксировать, действительно ли OrientEventEvent стрелял с любыми ненулевыми данными (как если бы это был гироскоп).
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")
}
Я испытал это на мобильный 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 браузер .. . Я надеюсь. Havent тестировал его на любых устройствах Android.
Следует отметить, что каждое событие возвращает разные числа, поэтому вам может потребоваться выполнить некоторую работу по их нормализации. Но это основы того, как вы к ним обращаетесь.
Дайте мне знать, если это поможет!
Привет, я могу только обнаружить устройство ** ** Motion Event с 3GS! Код, написанный выше, с DeviceOrientationEvent Listener, хорошо работает с iPhone 4 и iPad 2, но не работает на iPhone 3GS. – MavBzh