有没有办法让ol.interaction.Translate只在转移时点击+点击它当你一起翻译和修改时很难编辑图层。
码
var selectInteraction = new ol.interaction.Select({
condition: ol.events.condition.singleClick,
//toggleCondition: ol.events.condition.shiftKeyOnly,
layers: function (layer) {
return layer.get('id') == 'redline';
}
});
var modify = new ol.interaction.Modify({
features: selectInteraction.getFeatures()
});
var Translate = new ol.interaction.Translate({
features: selectInteraction.getFeatures()
});
map.getInteractions().extend([selectInteraction, modify, Translate]);
selected_features = selectInteraction.getFeatures();
答案 0 :(得分:0)
翻译扩展ol.interaction.Pointer
,所以according to the doc,您可以为多个事件提供处理程序方法。如果处理程序返回false
,则会丢弃偶数(至少从翻译的角度来看)。
您还可能希望提供handleEvent
,以便事件不会首先冒充其他事件:
该函数可能返回false以防止事件的传播 到地图互动链中的其他互动。
所以你可能想引入一个全局状态来跟踪一些迭代是否已经在运行,如果是,则取消所有其他交互。
let isInteractionRunning=false;
const Translate = new ol.interaction.Translate({
features: selectInteraction.getFeatures(),
handleDownEvent: (evt) => {
const shiftKeyPressed = evt.originalEvent.shiftKey;
if (shiftKeyPressed && !isInteractionRunning) {
isInteractionRunning = true;
return true;
}
return false;
},
handleUpEvent: function() {
// set back global state
isInteractionRunning = false;
return true;
}
});
const modify = new ol.interaction.Modify({
features: selectInteraction.getFeatures(),
handleDownEvent: () => {
if (!isInteractionRunning) {
isInteractionRunning = true;
return true;
}
return false;
},
handleUpEvent: function() {
// set back global state
isInteractionRunning = false;
return true;
}
});