问题来源
出于防误操作的关系,我考虑到在地图绘制时禁止掉拖动地图的操作,在绘制结束才恢复回来。但直接用openlayer的Interaction的DragPan注册控件行不通,由此我实验得到以下两种方法。
方法一:利用draw里的freehand模式
核心就是多加入两个属性来限制draw的应用范围。
new ol.interaction.Draw({
condition: ol.events.condition.mouseOnly,
freehandCondition: ol.events.condition.noModifierKeys,
source: source,
type: 'LineString'
});
方法二:利用已注册的DragPan来限制
既然自定义的不行,那就应该想到,初始化的时候地图就可以拖动,是不是意味着地图一开始就绑定好了拖动事件呢,事实证明是对的。既然如此,我就通过遍历拿到这个事件,再凭借事件来完成我想要的功能。(推荐原因:应用范围更广)。
var pan;
map.getInteractions().forEach(function(element,index,array){
if(element instanceof ol.interaction.DragPan) pan = element;
});
//使用: pan.setActive(true) --开启拖动 pan.setActive(false) --关闭拖动