Leaflet:如何禁用光标靠近地图边缘时的自动平移功能
问题解决方法
根因说明
你遇到的光标靠近地图边缘触发自动平移的问题,是Leaflet内置Popup组件的默认autoPan特性导致的:该特性默认会在Popup即将超出地图视口范围时,自动平移地图将Popup完整展示在视口内,和你自定义的光标绑定逻辑无关。
解决方案
只需要在初始化自定义光标所用的Popup实例时,显式关闭autoPan配置即可,该修改不会影响原有点击拖拽平移地图的交互。
修改点仅为将addHooks方法中初始化Popup的代码:
this._popup = new L.Popup();
替换为:
this._popup = new L.Popup({ autoPan: false });
修改后完整的核心代码
L.CursorHandler = L.Handler.extend({ addHooks: function () { // 仅修改这一行,关闭popup自动平移特性 this._popup = new L.Popup({autoPan: false}); this._map.on('mouseover', this._open, this); this._map.on('mousemove', this._update, this); // this._map.on('mouseout', this._close, this); }, removeHooks: function () { this._map.off('mouseover', this._open, this); this._map.off('mousemove', this._update, this); this._map.off('mouseout', this._close, this); }, _open: function (e) { this._update(e); this._popup.openOn(this._map); }, _close: function () { this._map.closePopup(this._popup); }, _update: function (e) { var latitude = e.latlng.toString().split(",")[0]; latitude = latitude.replace('LatLng','').replace('(','') var longitude = e.latlng.toString().split(",")[1]; longitude = longitude.replace('LatLng','').replace(')','') this._popup.setLatLng(e.latlng) .setContent("lat: " + roundToTwo(parseFloat(latitude)).toString() + String(", lon: ") + roundToTwo(parseFloat(longitude)).toString() + " | Relative %: " + roundToTwo( parseFloat( getColor(parseFloat(latitude), parseFloat(longitude)) ) ).toString()); } }); L.Map.addInitHook('addHandler', 'cursor', L.CursorHandler);
内容的提问来源于stack exchange,提问作者munkaboo
相关产品推荐
相关产品推荐

