为什么marker.dragging.disable()不起作用?

时间:2014-03-26 19:57:02

标签: leaflet

以下代码在启用和禁用标记拖动的行上收到错误(“无法获取属性'禁用'未定义或空引用”)。标记在地图上显示得很好,并且可以在创建线指示时拖动。放置警报代替启用线会产生正确的对象,因此我相信标记已定义。我需要做些什么来启用IHandler接口吗?还是我错过了别的什么?

var marker = L.marker(L.latLng(lat,lon), {icon:myIcon, draggable:'true'})
    .bindLabel(name, {noHide: true,direction: 'right'});
marker._myId = name;
if (mode === 0) {
    marker.dragging.enable();
} else {
    marker.dragging.disable();
}

3 个答案:

答案 0 :(得分:4)

我今天遇到了类似的问题(也许是同一个问题),这是由于传单中的错误(参见leaflet issue #2578),更改标记的图标会使该标记上的任何拖动处理无效。这使得对marker.dragging.disable()的任何调用都失败。

fix在撰写本文时尚未将其制作成传单。解决方法是在更新可拖动状态后更改图标(如果可能)。

marker.dragging.disable();
marker.setIcon(marker_icon);

答案 1 :(得分:1)

使用以下代码使对象可拖动。将elementToDrag设置为您想要拖动的对象,在您的情况下:“marker”

var draggable = new L.Draggable(elementToDrag);
draggable.enable(); 

要禁用拖动,请使用以下代码:

draggable.disable()
  

使DOM元素可拖动的类(包括触摸支持)。   内部用于地图和标记拖动。仅适用于元素   使用DomUtil#setPosition

定位的

leaflet: Draggable

如果您只想禁用标记的拖动选项,则可以使用以下代码(其中“marker”是标记对象的名称):

marker.dragging.disable(); 
marker.dragging.enable();

答案 2 :(得分:0)

我还没有找到答案,但我的解决方法是:

var temp;
if (mode === 0) {
    temp = true;
} else {
    temp = false;
}
var marker = L.marker(L.latLng(lat,lon), {icon:myIcon, draggable:temp})
    .bindLabel(name, {noHide: true,direction: 'right'});
marker._myId = name;

幸运的是,我可以在可拖动时更改我的图标。