我试图让ol.overlay可以拖动,但我无法做到。我找到了这个例子(http://openlayers.org/en/v3.2.1/examples/drag-features.html?q=drag),但它是使用ol.Features完成的,我需要的是一个叠加层,因为我可以使用自定义-html div来显示我需要的东西。我还发现了一个非常有趣的例子,它可以做我想要的,但它是使用谷歌地图v3完成的,我需要它为ol3。
提前谢谢。
答案 0 :(得分:2)
您只需注册一个“mousedown'叠加层div上的事件监听器。在那个听众里面,注册“mousemove'和' mouseup'窗户上的事件。要更新' mousemove'上的位置,请使用ol.Map#getEventPixel()
方法,该方法将鼠标移动到'事件作为参数。在' mouseup'上,您只需取消注册窗口侦听器。
marker_el.addEventListener('mousedown', function(evt) {
function move(evt) {
marker.setPosition(map.getEventCoordinate(evt));
}
function end(evt) {
window.removeEventListener('mousemove', move);
window.removeEventListener('mouseup', end);
}
window.addEventListener('mousemove', move);
window.addEventListener('mouseup', end);
});
有关工作示例,请参阅http://jsfiddle.net/rnzgfg89/6/。
答案 1 :(得分:0)
<强>更新强>
不需要这种ol.Map.prototype.forEachOverlayAtPixel
方法(参见https://github.com/openlayers/ol3/issues/5760)。
只需在DOM覆盖元素上注册一个mousedown
侦听器,您就可以了。的 Fiddle updated 强>
ol.Overlay
在OL3中是一个糟糕的类型,但有一些工作,是的,你可以实现它。 ol.Feature
是无所不能的,如果你真的需要ol.Overlay
我提出了 demo fiddle 。
这个想法是:
收听pointerdown
地图事件,并检查点击的像素是否有叠加层;
ol.Map.prototype.forEachOverlayAtPixel
- 刚为问题创建停用ol.interaction.DragPan
- 地图平移;
倾听pointermove
并设置叠加位置;
倾听pointerup
并恢复ol.interaction.DragPan
;