Sử dụng API vị trí địa lý, chúng tôi có thể yêu cầu trình duyệt cung cấp tọa độ vị trí của người dùng
Trình duyệt cho thấy mộtnavigator.geolocation
đối tượng, qua đó chúng tôi sẽ thực hiện tất cả các hoạt động định vị địa lý.
Nó chỉ khả dụng trên các trang được phân phát bằng HTTPS, vì mục đích bảo mật và nó có sẵn trên tất cả các trình duyệt hiện đại.
navigator.geolocation
Từ
window
là đối tượng toàn cục, chúng ta có thể truy cậpnavigator
mà không chỉ địnhwindow.navigator
Cácwindow.navigator
thuộc tính được trình duyệt hiển thị trỏ đến mộtĐối tượng điều hướngmà là mộtvật chứađiều đó cung cấp cho chúng tôi rất nhiều API nền tảng web.
Cácgeolocation
đối tượng cung cấp các phương thức sau:
getCurrentPosition()
watchPosition()
clearWatch()
Cái đầu tiên được sử dụng để lấy tọa độ vị trí hiện tại. Khi chúng tôi gọi phương thức này lần đầu tiên, trình duyệt sẽ tự động yêu cầu người dùng cho phép chia sẻ thông tin này với chúng tôi.
Đây là giao diện này trông như thế nào trong Chrome:
trên Firefox:
và trên Safari:
Điều này chỉ cần được thực hiện một lần cho mỗi điểm gốc. Bạn có thể thay đổi quyết định mình đã đưa ra và hoàn nguyên quyết định cấp phép. Đây là cách bạn thực hiện với Chrome bằng cách nhấp vào biểu tượng khóa gần miền:
Sau khi quyền này được cấp, chúng tôi có thể tiếp tục.
Có được vị trí của người dùng
Hãy bắt đầu với mã mẫu này:
navigator.geolocation.getCurrentPosition(() => {})
Bảng quyền sẽ xuất hiện. Cho phép sự cho phép.
Chú ý cách tôi vượt qua một ô trốnghàm mũi tên, bởi vì hàm muốn một hàm gọi lại.
Hàm này được thông qua mộtPosition
đối tượng, chứa vị trí thực tế:
navigator.geolocation.getCurrentPosition(position => {
console.log(position)
})
Đối tượng này có 2 thuộc tính:
coords
, mộtCoordinates
vậttimestamp
, cácDấu thời gian UNIXkhi vị trí được lấy lại
CácCoordinates
đối tượng đi kèm với một số thuộc tính xác định vị trí:
accuracy
độ chính xác của vị trí được đo, tính bằng métaltitude
giá trị độ cao đo đượcaltitudeAccuracy
độ chính xác của độ cao đo được, tính bằng métheading
hướng mà thiết bị đang di chuyển. Được biểu thị bằng độ (0 = Bắc, Đông = 90, Nam = 180, Tây = 270)latitude
giá trị vĩ độ đo đượclongitude
giá trị kinh độ đo đượcspeed
tốc độ mà thiết bị đang di chuyển, được biểu thị bằng mét trên giây
Tùy thuộc vào cách triển khai và thiết bị, một số trong số đó sẽnull
. Ví dụ: trên Chrome chạy trên MacBook Air của tôi, tôi chỉ nhận được các giá trị choaccuracy
,latitude
vàlongitude
.
navigator.geolocation.getCurrentPosition(position => {
console.log(position.coords.latitude)
console.log(position.coords.longitude)
})
Xem vị trí để thay đổi
Ngoài việc có được vị trí người dùng một lần, bạn có thể thực hiện điều này bằng cách sử dụnggetCurrentPosition()
, bạn có thể dùngwatchPosition()
phương pháp củanavigator.geolocation
để đăng ký một chức năng gọi lại sẽ được gọi theo mỗi và mọi thay đổi mà thiết bị sẽ giao tiếp với chúng tôi.
Sử dụng:
navigator.geolocation.watchPosition(position => {
console.log(position)
})
Tất nhiên trình duyệt cũng sẽ yêu cầu quyền với phương pháp này, nếu nó chưa được cấp.
Chúng ta có thể ngừng theo dõi một vị trí bằng cách gọinavigator.geolocation.clearWatch()
phương pháp, chuyển nóid
trả lại bởiwatchPosition()
:
const id = navigator.geolocation.watchPosition(position => {
console.log(position)
})
//stop watching after 10 seconds
setTimeout(() => {
navigator.geolocation.clearWatch(id)
}, 10 * 1000)
Nếu người dùng từ chối quyền
Hãy nhớ cửa sổ bật lên quyền mà trình duyệt hiển thị khi chúng ta gọi một trong các phương thức để có được vị trí?
Nếu người dùng từ chối điều đó, chúng tôi có thể chặn trường hợp này bằng cách thêm một hàm xử lý lỗi, làm tham số thứ hai cho các phương thứcgetCurrentPosition()
vàwatchPosition()
.
navigator.geolocation.getCurrentPosition(position => {
console.log(position)
}, error => {
console.error(error)
})
Đối tượng được truyền cho tham số thứ hai chứacode
thuộc tính để phân biệt giữa các loại lỗi:
1
có nghĩa là sự cho phép bị từ chối2
có nghĩa là vị trí không có sẵn3
nghĩa là hết thời gian
Thêm các tùy chọn khác
Khi tôi nói về các lỗi trước đây, tôi đã đề cập đến lỗi thời gian chờ. Việc tra cứu vị trí có thể mất một chút thời gian và chúng tôi có thể đặt thời gian tối đa được phép để thực hiện thao tác, như một tùy chọn.
Bạn có thể thêm thời gian chờ bằng cách thêm tham số thứ ba vào các phương thứcgetCurrentPosition()
vàwatchPosition()
, một đối tượng.
navigator.geolocation.getCurrentPosition(position => {
console.log(position)
}, error => {
console.error(error)
}, {
})
Bên trong đối tượng này, chúng ta có thể truyền các thuộc tính
timeout
để đặt số mili giây trước khi yêu cầu bị lỗimaximumAge
để đặt “tuổi” tối đa của vị trí được trình duyệt lưu trong bộ nhớ cache. Chúng tôi không chấp nhận một cái cũ hơn số mili giây đã đặtenableHighAccuracy
một boolean theo mặc địnhfalse
, yêu cầu một vị trí với mức độ chính xác cao nhất có thể (có thể mất nhiều thời gian hơn và nhiều năng lượng hơn)
Ví dụ sử dụng:
navigator.geolocation.getCurrentPosition(position => {
console.log(position)
}, error => {
console.error(error)
}, {
timeout: 1000,
maximumAge: 10000,
enableHighAccuracy: true
})
Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript
Các hướng dẫn khác về trình duyệt:
- Một số thủ thuật hữu ích có sẵn trong HTML5
- Cách tôi làm cho một trang web dựa trên CMS hoạt động ngoại tuyến
- Hướng dẫn hoàn chỉnh về ứng dụng web tiến bộ
- API tìm nạp
- Hướng dẫn API đẩy
- API nhắn tin kênh
- Hướng dẫn Nhân viên Dịch vụ
- Hướng dẫn API bộ nhớ cache
- Hướng dẫn API thông báo
- Đi sâu vào IndexedDB
- API Bộ chọn: querySelector và querySelectorAll
- Tải JavaScript hiệu quả với trì hoãn và không đồng bộ
- Mô hình đối tượng tài liệu (DOM)
- API lưu trữ web: lưu trữ cục bộ và lưu trữ phiên
- Tìm hiểu cách hoạt động của HTTP Cookies
- API lịch sử
- Định dạng hình ảnh WebP
- XMLHttpRequest (XHR)
- Hướng dẫn chuyên sâu về SVG
- URL dữ liệu là gì
- Lộ trình tìm hiểu Nền tảng Web
- CORS, Chia sẻ tài nguyên đa nguồn gốc
- Nhân viên web
- Hướng dẫn requestAnimationFrame ()
- Doctype là gì
- Làm việc với Bảng điều khiển DevTools và API Bảng điều khiển
- API tổng hợp giọng nói
- Cách chờ sự kiện DOM sẵn sàng bằng JavaScript thuần túy
- Cách thêm lớp vào phần tử DOM
- Cách lặp qua các phần tử DOM từ querySelectorAll
- Cách xóa một lớp khỏi phần tử DOM
- Cách kiểm tra xem một phần tử DOM có một lớp hay không
- Cách thay đổi giá trị nút DOM
- Cách thêm sự kiện nhấp chuột vào danh sách các phần tử DOM được trả về từ querySelectorAll
- WebRTC, API web thời gian thực
- Cách lấy vị trí cuộn của một phần tử trong JavaScript
- Cách thay thế một phần tử DOM
- Cách chỉ chấp nhận hình ảnh trong trường tệp đầu vào
- Tại sao sử dụng phiên bản xem trước của trình duyệt?
- Đối tượng Blob
- Đối tượng tệp
- Đối tượng FileReader
- Đối tượng FileList
- ArrayBuffer
- ArrayBufferView
- Đối tượng URL
- Mảng đã nhập
- Đối tượng DataView
- API BroadcastChannel
- API luồng
- Đối tượng FormData
- Đối tượng Điều hướng
- Cách sử dụng API vị trí địa lý
- Cách sử dụng getUserMedia ()
- Cách sử dụng API Kéo và Thả
- Cách làm việc với tính năng cuộn trên các Trang Web
- Xử lý các biểu mẫu trong JavaScript
- Sự kiện bàn phím
- Sự kiện chuột
- Chạm vào sự kiện
- Cách xóa tất cả phần tử con khỏi phần tử DOM
- Cách tạo thuộc tính HTML bằng vanilla Javascript
- Làm cách nào để kiểm tra xem một hộp kiểm đã được chọn bằng JavaScript hay chưa?
- Cách sao chép vào khay nhớ tạm bằng JavaScript
- Cách tắt một nút bằng JavaScript
- Cách làm cho một trang có thể chỉnh sửa trong trình duyệt
- Cách lấy giá trị chuỗi truy vấn trong JavaScript với URLSearchParams
- Cách xóa tất cả CSS khỏi một trang cùng một lúc
- Cách sử dụng insertAdjacentHTML
- Safari, cảnh báo trước khi thoát
- Cách thêm hình ảnh vào DOM bằng JavaScript
- Cách đặt lại biểu mẫu
- Cách sử dụng Google Fonts