Chrome 50 sắp có các thay đổi về hướng thiết bị

Jeff Posnick
J Jeff Posnick

Các nhà phát triển phát triển ứng dụng web thực tế ảo hoặc thực tế tăng cường chắc chắn sẽ quen thuộc với DeviceOrientationEvent. Đối với người dùng chưa bắt đầu, bài viết "This End Up: Using Device Orientation (Kết thúc này: Sử dụng hướng thiết bị) cung cấp thông tin tổng quan hữu ích về cách trình nghe sự kiện deviceorientation có thể phản hồi việc xoay và xoay thiết bị.

Trong các phiên bản Chrome trước đây, các giá trị alpha, betagamma trong DeviceOrientationEvent được cung cấp dưới dạng absolute độ so với khung toạ độ của Earth. Để cung cấp độ tuyệt đối, bạn phải dùng cảm biến từ kế của thiết bị để phát hiện từ trường của Trái đất, do đó, dễ gặp các biến động từ trường ở gần có thể làm sai lệch kết quả đọc. Trên thực tế, điều này có thể dẫn đến việc một ứng dụng web đăng ký một loạt DeviceOrientationEvent do một nam châm ở gần, mặc dù thiết bị đó không thực sự di chuyển. Đối với một ứng dụng thực tế ảo chỉ quan tâm đến việc theo dõi các thay đổi về hướng, thì nhiễu từ này là tin xấu.

Điều gì sẽ thay đổi?

Kể từ Chrome 50, độ trong DeviceOrientationEvent theo mặc định không còn tuyệt đối so với khung toạ độ của Trái đất. Điều này có nghĩa là DeviceOrientationEvent chỉ được kích hoạt khi có chuyển động thực sự, được phát hiện bởi một số tổ hợp giữa gia tốc kế và con quay hồi chuyển của thiết bị. Từ kế và các chỉ số đọc sai do sự biến động từ trường, đều không được chụp.

Nhưng tôi vẫn cần độ tuyệt đối!

Nếu bạn đang viết JavaScript cần sử dụng mức độ tuyệt đối, có thể là một phần của ứng dụng web thực tế tăng cường cần ánh xạ trực tiếp vào thế giới thực, thì bạn sẽ không gặp may. Hành vi trước đó (phụ thuộc vào từ kế của thiết bị) có sẵn thông qua một sự kiện deviceorientationabsolute mới. Từ góc độ của nhà phát triển, tính năng này tương tự như DeviceOrientationEvent hiện tại, với sự đảm bảo rằng thuộc tính absolute sẽ được đặt thành true.

Phát hiện nội dung được hỗ trợ

Các nhà phát triển muốn có mức độ tuyệt đối có thể sử dụng tính năng phát hiện tính năng để xác định xem họ có đang sử dụng trình duyệt hỗ trợ sự kiện DeviceOrientationAbsoluteEvent mới hay không:

if ('ondeviceorientationabsolute' in window) {
    // We can listen for the new deviceorientationabsolute event.
} else if ('ondeviceorientation' in window) {
    // We can still listen for deviceorientation events.
    // The `absolute` property of the event tells us whether
    // or not the degrees are absolute.
}

Khả năng tương thích trên nhiều trình duyệt

Các giá trị được báo cáo trong DeviceOrientationEvent chưa bao giờ nhất quán.

Safari và Firefox trên iOS sử dụng các giá trị tương đối về độ, phù hợp với thay đổi về cách triển khai được giới thiệu trong Chrome 50. Thay đổi này sẽ giúp đảm bảo tính nhất quán hơn với các ứng dụng web được viết dành cho iOS.

Các phiên bản Firefox (trên các nền tảng không phải iOS), Edge và Chrome trước 50 sử dụng giá trị độ tuyệt đối cho DeviceOrientationEvent khi chạy trên các thiết bị có cảm biến thích hợp.

Tại thời điểm viết bài này, Chrome 50 là trình duyệt đầu tiên hỗ trợ DeviceOrientationAbsoluteEvent mới.

Theo dõi hướng nâng cao bằng DeviceMotionEvent

Boris Smus có một bài viết chi tiết trình bày chi tiết về một số nhược điểm của việc sử dụng DeviceOrientationEvent và cách triển khai tính năng phản ứng tổng hợp cảm biến riêng bằng DeviceMotionEvent. Các API này cấp quyền truy cập cấp thấp vào gia tốc kế và con quay hồi chuyển, đồng thời có thể mang lại trải nghiệm thực tế ảo chính xác hơn cho người dùng.

Tài nguyên khác