SvelteKit项目Leaflet标记固定地图中心及map.getCenter报错求助
解决Leaflet标记随地图平移保持居中的报错问题
问题根源:moveend事件的回调函数接收的参数不是Leaflet Map实例,而是事件对象,所以你调用map.getCenter()时,实际是在事件对象上调用这个方法,自然会报map.getCenter is not a function错误——而初始化时你直接用的是外部的map变量,所以没问题。
有两种修正方式:
方式一:直接使用外部作用域的map变量
修改回调函数,去掉参数里的map,直接引用外部已定义的map实例:
function centerMarkerOnMap() { currentPositionMarker.setLatLng(map.getCenter()) } // 绑定事件 map.on('moveend', centerMarkerOnMap)
方式二:从事件对象中获取Map实例
如果需要通过事件对象获取map(比如作用域有冲突时),可以用evt.target拿到触发事件的Map对象:
function centerMarkerOnMap(evt) { currentPositionMarker.setLatLng(evt.target.getCenter()) } // 绑定事件 map.on('moveend', centerMarkerOnMap)
另外补充个优化点:如果希望标记在地图拖动过程中就保持居中,而不是只在拖动结束后更新,可以把事件换成move,这样体验更流畅:
map.on('move', centerMarkerOnMap)
内容的提问来源于stack exchange,提问作者TheGreatZackAttack
相关产品推荐
相关产品推荐

