我遇到了 OpenLayers 问题并取消注册添加到图层的点击事件。基本上,我需要做的是:
当用户点击一个标记时,他们会得到一个带有“编辑”链接的气泡。用户点击它,它会在地图上创建一个新图层,然后向地图注册一个点击事件,等待用户点击地图。当他们单击地图上的某个位置时,它会将标记移动到他们单击的位置。这一切都完美无缺。
但是,问题是当用户单击以编辑标记,然后单击地图外的按钮以取消操作并且不移动标记时,单击事件的取消注册不起作用。他们仍然可以点击地图并移动标记。
这是代码示例:
function move_marker(marker) {
lmLayer = new OpenLayers.Layer.Markers("Landmark Creation",{displayInLayerSwitcher: false});
map.addLayer(lmLayer);
map.events.register("click", lmLayer, function(evt){
var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
position = map.getLonLatFromPixel(pixel);
marker.lonlat = pixel;
marker.moveTo(pixel);
marker.draw();
lmLayer.redraw();
OpenLayers.Event.stop(evt);
});
}
function cancel_move() { // this function is triggered by a button outside of the map element
lmLayer = map.getLayersByName('Landmark Creation');
lmLayer[0].events.unregister("click");
map.events.unregister("click");
map.removeLayer(lmLayer[0]);
}
正如您在取消功能中看到的那样,我通过图层名称获取图层,根据 console.log 它在索引 0 处找到。我将取消注册添加到 lmLayer 希望这会有所帮助,但到目前为止,没运气。然后在地图元素上添加取消注册调用,最后我删除了那个新层,因为我们不希望它干扰。
我很感激对此的一些反馈。我正在失去理智。
谢谢!