Tôi hy vọng điều này không đến với bạn quá muộn, nhưng không phải là bực bội khi Safari for iOS 4.2+ sẽ đăng ký DeviceOrientationEvent trên iPhone 3GS (hoặc các thiết bị khác không có con quay hồi chuyển)?
Dòng dưới cùng, DeviceOrientation không hoạt động với iPhone 3GS. Nhưng như một ai đó đã đề cập, DeviceMotionEvent hoạt động, nhưng bạn phải truy cập dữ liệu sự kiện theo một cách khác với cách bạn làm với một thiết bị có con quay hồi chuyển (ngớ ngẩn mà tôi biết!).
Bước đầu tiên: Tôi đã thêm biến trong kết hợp để nắm bắt liệu OrientationEvent có thực sự kích hoạt với bất kỳ dữ liệu không null nào không (nếu nó có con quay hồi chuyển).
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
}
Bây giờ bạn biết sự kiện có thực sự có dữ liệu con quay hồi chuyển hay không! Vì vậy, nếu bạn muốn mặc định cho cái gì khác (ví dụ: window.DeviceMotionEvent), bạn có thể sử dụng một điều kiện.
if (!canHandleOrientation) {
console.log("There is no gyroscope")
}
tôi thử nghiệm này trên Mobile Safari cho iPhone 3GS (không con quay hồi chuyển) và iPad 2 (con quay hồi chuyển) và Chrome trên Macbook Pro của tôi (con quay hồi chuyển). Dường như làm việc.
Bây giờ, nếu bạn muốn để có được các dữ liệu DeviceMotionEvent như một sự thay thế nếu dữ liệu Định hướng không có sẵn, sau đó ...
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);
}
}
này nên bao gồm các căn cứ của bạn đối với hầu hết các thiết bị với một trình duyệt webkit .. . Tôi hi vọng. Havent đã thử nghiệm nó trên bất kỳ thiết bị Android nào.
Cần lưu ý, mỗi sự kiện trả về các số khác nhau, vì vậy bạn có thể cần thực hiện một số công việc để chuẩn hóa chúng. Nhưng đây là những điều cơ bản về cách bạn truy cập chúng.
Hãy cho tôi biết nếu điều này có ích!
Hi, tôi chỉ có thể phát hiện thiết bị ** Chuyển động ** tổ chức sự kiện với 3GS! Mã được viết ở trên, với Trình nghe DeviceOrientationEvent, hoạt động tốt với iPhone 4 và iPad 2 nhưng không hoạt động trên iPhone 3GS. – MavBzh