单击并双击,取消选择交互 OpenLayers 3

Click and Double click, deselect interaction OpenLayers 3

我有两个ol.interaction.Select,一个是单击,另一个是双击。

var selectDoubleClick = new ol.interaction.Select({
    multi: true,
    condition: ol.events.condition.doubleClick,
    style: function(feature) {
        //stuff here;
    }
    return feature;
}

selectDoubleClick.on('select',function(event) {
    //stuff here
}

var selectSingleClick = new ol.interaction.Select({
    multi: true,
    condition: ol.events.condition.singleClick,
    style: function(feature) {
        //stuff here
    }
    return feature;
}

selectSingleClick.on('select',function(event) {
    //stuff here
}

但是当我想取消双击时,我必须在地图上点击两次。有什么方法可以通过单击双击取消选择吗?

您可以通过将自定义函数作为 selectDoubleClick 交互的 condition 传递来实现。检查所选功能并在未选择功​​能时对 double-click 做出反应的东西,以及在选择功能时对 single-click 做出反应的东西。像这样:

condition: function(mapBrowserEvent) {
  if (selectDoubleClick.getFeatures().getLength() == 0) {
    return mapBrowserEvent.type == 'dblclick';
  } else {
    return mapBrowserEvent.type == 'singleclick';
  }
}

在我解决问题的版本中,我使用了来自@ahocevar 的部分代码 我的解决方案很简单。首先如果存在任何 getFeature link 到此交互 (selectDoubleClick),然后清除此功能。

var concludeClickEdit = function(eventListener) {
    if(selectDoubleClick.getFeatures().getLength() !== 0){
             selectDoubleClick.getFeatures().clear();
          }
}

如果单击地图而不是清除地图项,最好让事件监听。