Leaflet:在光标位置而不是 LineString 中心打开弹出窗口

Hug*_*o H 2 javascript geojson leaflet

我有一张带有 的传单地图LineString。

// a GeoJSON LineString
var geojson = {
  "type": "Feature",
  "geometry": {
    "type": "LineString",
    "coordinates": [[-101.123, 40.2500], [-101.123, 40.2503]]
  }
};

// create map and add json
var map = L.map('map');
var geojsonLayer = new L.GeoJSON(geojson).addTo(map);
map.fitBounds(geojsonLayer.getBounds())

// add popup for the line
geojsonLayer.eachLayer(function (layer) {
  var popup = L.popup();
  popup.setContent('text');

  layer.bindPopup(popup);
  layer.on('click mouseover', function () {
    layer.openPopup();
  });
});
Run Code Online (Sandbox Code Playgroud)

当我越过它时,LineString 中心会打开一个弹出窗口。

如何让它在光标位置打开?

这是一个简单的工作示例:http ://jsfiddle.net/wuu8Lv2t/1/

YaF*_*red 5

不要让图层打开弹出窗口,而是使用openOn(map)事件中的坐标设置位置e.latlng

// add popup for the line
geojsonLayer.eachLayer(function (layer) {
  var popup = L.popup();
  popup.setContent('text');
  layer.bindPopup(popup);

  layer.on('mouseover', function (e) {
    var popup = e.target.getPopup();
    popup.setLatLng(e.latlng).openOn(map);
  });

  layer.on('mouseout', function(e) {
     e.target.closePopup();
  });

  layer.on('mousemove', function (e) {
    e.target.closePopup();
    var popup = e.target.getPopup();
    popup.setLatLng(e.latlng).openOn(map);
  });
});
Run Code Online (Sandbox Code Playgroud)

请注意,在您的问题中存在一个错误:您不能layer在事件处理程序中使用变量,您必须使用e.target(请参阅doc)。