Javascript 带点销毁的OpenLayers DrawFeature控件双击可缩放
我从一个openlayers示例中复制了一些简单的代码,用于在地图上绘制几种不同类型的几何图形。问题是,无论何时选择“点”几何体,我都无法双击放大。示例和我的代码之间的唯一区别是我注册了使用MOD_SHIFT的处理程序,因为我希望保留平移/缩放的功能。下面是一个代码的小陷阱:Javascript 带点销毁的OpenLayers DrawFeature控件双击可缩放,javascript,event-handling,openlayers,Javascript,Event Handling,Openlayers,我从一个openlayers示例中复制了一些简单的代码,用于在地图上绘制几种不同类型的几何图形。问题是,无论何时选择“点”几何体,我都无法双击放大。示例和我的代码之间的唯一区别是我注册了使用MOD_SHIFT的处理程序,因为我希望保留平移/缩放的功能。下面是一个代码的小陷阱: point: new OpenLayers.Control.DrawFeature(this.geometryFilterLayer, OpenLayers.H
point: new OpenLayers.Control.DrawFeature(this.geometryFilterLayer,
OpenLayers.Handler.Point,
{
'done': console.info("drew point")
},
{
keyMask: OpenLayers.Handler.MOD_SHIFT
}
),
polygon: new OpenLayers.Control.DrawFeature(this.geometryFilterLayer,
OpenLayers.Handler.Polygon,
{
'done': console.info("drew polygon")
},
{
keyMask: OpenLayers.Handler.MOD_SHIFT
}
),
上述代码的有趣之处在于,只有在创建控件/处理程序时才会触发“done”事件,而keyMask根本不起作用——每次我都必须循环这个对象并手动设置keyMask,但这不是真正的问题
我已经尝试了我能想到的所有方法来注册dblclick事件,但不管怎样,我都无法在双击时将其放大。它适用于所有其他几何体(bbox、点/半径和多边形)
有谁能给我一些建议吗?我从来没有解决过这个问题,但最终完全放弃了使用MOD_XXX。每个不同的绘图控件都有太多的内置功能,无法在按住shift、ctrl、alt等键时进行操作。我最终使用了自定义按钮和工具栏,这样用户就可以自己显式地选择绘图控件
this.toolbar = new OpenLayers.Control.Panel({
displayClass: 'olControlEditingToolbar'
});
map.addControl(this.toolbar);
var navButton = new OpenLayers.Control.Button({
displayClass: "olControlNavigation",
title: "Navigation",
trigger: lang.hitch(this, function(data){
this.toggleDrawControl("navigation");
navButton.activate();
pointButton.deactivate();
bboxButton.deactivate();
pointRadiusButton.deactivate();
polygonButton.deactivate();
})
});
...
this.toolbar.addControls([navButton, pointButton, bboxButton, pointRadiusButton, polygonButton]);
以及切换绘图控件的功能(可在外部调用,因此我重新调用激活和停用功能:
toggleDrawControl: function(geometryType){
this.currentGeometryType = geometryType;
for(key in this.drawControls) {
var control = this.drawControls[key];
if(geometryType == key) {
control.activate();
this.drawingButtons[key].activate();
} else {
control.deactivate();
this.drawingButtons[key].deactivate();
}
}
}