Javascript 取消可编辑多段线的顶点拖动

Javascript 取消可编辑多段线的顶点拖动,javascript,leaflet,leaflet.draw,Javascript,Leaflet,Leaflet.draw,我正在使用“传单.可编辑”插件,并试图确定当用户单击直线的第一点或最后一点时,是否可以取消多段线拖动操作。我只希望它们能够沿着直线拖动“中点”,直线的端点需要保持在原始位置 我看到了editable:vertex:dragstart事件,但这似乎不允许我取消该事件。我认为这是因为传递给此事件处理程序的参数不是类型cancelablevertexent,因此没有可以调用的cancel()方法 有单击和editable:vertex:click和editable:vertex:rawclick事件,

我正在使用“传单.可编辑”插件,并试图确定当用户单击直线的第一点或最后一点时,是否可以取消多段线拖动操作。我只希望它们能够沿着直线拖动“中点”,直线的端点需要保持在原始位置

我看到了
editable:vertex:dragstart
事件,但这似乎不允许我取消该事件。我认为这是因为传递给此事件处理程序的参数不是类型
cancelablevertexent
,因此没有可以调用的
cancel()
方法

有单击和
editable:vertex:click
editable:vertex:rawclick
事件,但这些事件是在
dragstart
事件之后触发的(因为需要释放鼠标按钮!)

我尝试在给定条件的处理程序中返回
false

section.on('editable:vertex:dragstart', (e) => {
    if(e.vertex.latlngs[0] === e.vertex.latlng) {
        return false;
    }
});

但这不起作用,有人知道这是否可行,或者我需要在这里做什么吗?

您可以禁用所需顶点上的可拖动功能,而不是取消事件。要在定义为的可编辑多段线上实现此目标,请执行以下操作:

var section = L.polyline(/* your coords */).addTo(map);
section.enableEdit();
抓住第一点和最后一点:

var coords = section.getLatLngs();
var disabled = [coords[0], coords[coords.length-1]];
而且,由于顶点继承自
L.Marker
,因此可以调用:

最后是一个演示

var起始点=[43.1,1.2];
var map=L.map('map',{可编辑:true}).setView(startPoint,9),
tilelayer=L.tilelayer('http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',{maxZoom:11,属性:'Data\u00a9 Tiles\u00a9 hot'})。添加到(地图);
var截面=L.多段线([[43.0,1.15],[43.1,1.2],[43.2,1.5],[43.25,1.2])。添加到(地图);
节。启用编辑();
var coords=section.getLatLngs();
禁用变量=[coords[0],coords[coords.length-1];
//图标来自http://www.iconarchive.com/show/vista-map-markers-icons-by-icons-land/Map-Marker-Chequered-Flag-Right-Chartreuse-icon.html
var goalpost=L.icon({
伊克努尔:'http://icons.iconarchive.com/icons/icons-land/vista-map-markers/24/Map-Marker-Chequered-Flag-Right-Chartreuse-icon.png',
iconSize:[24,24],
iconAnchor:[0,24],
});
禁用。forEach(功能(latlng){
var顶点=板条顶点;
vertex.draging.disable();
顶点设置图标(球门柱);
});
html,正文{
身高:100%;
保证金:0;
}
#地图{
宽度:100%;
身高:100%;
}


非常感谢,
\u vertex
对我来说是一个内部属性,它是否得到官方支持?它确实是由传单添加的一个内部属性。可编辑以跟踪顶点。官方支持?可能不会,但它在源代码中被广泛使用,应该是合理安全的。
disabled.forEach(function(latlng) {
    var vertex = latlng.__vertex;
    vertex.dragging.disable();
});