我正在将leafletj用于非地理应用程序,用户可以在其中向地图添加图标(标记)并在不同图标的“端口”之间绘制线条。 端口简单地定义为相对于图标视口左上角的x,y位置(图标为SVG)。
我扩展L.Marker
以提供SVGMarker
类并实现onMouseOver
函数来检测鼠标何时在端口上(在容差范围内)并适当地更改光标。
使用传单的拖动功能将标记定义为draggable
。
现在我想实现一个onMouseDown
函数,当用户点击一个端口并开始拖动时开始绘制一条线。
当onMouseDown
功能检测到我在靠近端口时,如何覆盖拖动功能?
onMouseDown: function(event) {
let nearPort = false;
const { offsetX, offsetY } = event.originalEvent;
const { ports } = this.options;
for (let i = 0; i < ports.length; i++) {
const currentPort = ports[i];
// Calculate euclidian distance from mouse press location to the current port location
const dist = distance(currentPort.x, offsetX, currentPort.y, offsetY);
nearPort = (dist < this.options.tolerance);
if (nearPort) {
// TODO: Prevent marker from being dragged and start drawing line
break;
}
}
}