Javascript 如何使用无事件的传单获取当前地理位置?

Javascript 如何使用无事件的传单获取当前地理位置?,javascript,leaflet,Javascript,Leaflet,我已经相当深入地阅读了传单文档,我找不到一个简单的答案来回答我的问题 首先是一些背景: 我已经创建了一个新地图,并将其居中于当前位置,并为找到的位置添加了一个侦听器 var map = L.map('map', {zoomControl: false}).fitWorld(); L.tileLayer('https://api.mapbox.com/styles/v1/mapbox/outdoors-v9/tiles/256/{z}/{x}/{y}?access_token=p

我已经相当深入地阅读了传单文档,我找不到一个简单的答案来回答我的问题

首先是一些背景:

我已经创建了一个新地图,并将其居中于当前位置,并为找到的位置添加了一个侦听器

    var map = L.map('map', {zoomControl: false}).fitWorld();

    L.tileLayer('https://api.mapbox.com/styles/v1/mapbox/outdoors-v9/tiles/256/{z}/{x}/{y}?access_token=pk.eyJ1IjoiZG9ucZhc3o3ODMifQ.3-x6nnTgePEK0ERPllV7oQ', {
        maxZoom: 20
    }).addTo(map);

    map.locate({setView: true, watch: true, maxZoom: 17});
    map.on('locationfound', onLocationFound);
我现在想在当前位置创建一个标记,例如

    marker = L.marker(map.getLatLong);
    marker.addTo(map);
这将通过onLocationFound()函数完成,因为我只想创建它一次,然后使用locationfound事件使用marker.setLatLng()移动标记

如何使用传单获取当前的LatLong?它是否有HTML5地理定位API的简单替代方案

我尝试了map.getCenter,但它返回(0,0)

这将通过
onLocationFound()
函数完成,因为我只想创建一次

在这种情况下,请使用
map.once()
而不是
map.on()
。正如您所能看到的,
once()
on()
相同,但只在第一个此类事件上运行

然后使用
locationfound
事件,使用
marker.setLatLng()
移动标记

在这种情况下,请检查标记是否已创建,如果未创建,请创建,如果已创建,请移动。类似于

var marker;
map.on('locationfound', function(ev){
    if (!marker) {
        marker = L.marker(ev.latlng);
    } else {
        marker.setLatLng(ev.latlng);
    }
})
如果有人知道一种没有事件的整洁方式,我也会很感激


在这种情况下,一定要看一看。没有事件,但仍然存在异步回调。您可以直接使用这些回调,您可以将它们包装在事件处理程序中(就像传单一样),您可以将它们包装在
Promise
s中,但这样或那样,您将不得不处理不完全琐碎的异步性问题。

有一个可能很有用的示例。谢谢。这确实有效,但如果有人知道一种没有事件的整洁方法,我也会很感激。可能不会,因为您正在与服务器通信以获取此信息,而且99.9%的时间都是基于事件的。