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

Click 单击并双击,取消选择交互OpenLayers 3,click,openlayers-3,double-click,Click,Openlayers 3,Double Click,我有两个ol.交互。选择,一个单击,另一个双击 var selectDoubleClick = new ol.interaction.Select({ multi: true, condition: ol.events.condition.doubleClick, style: function(feature) { //stuff here; } return feature; } selectDoubleClick.on('selec

我有两个ol.交互。选择,一个单击,另一个双击

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
}

但是当我想取消选择双击时,我必须在地图上单击两次。有没有办法只需单击一下就可以在双击中取消选择

您可以通过将自定义函数作为
选择双击
交互的
条件
传递来执行此操作。检查所选特征并在未选择特征时对双击作出反应,在有所选特征时对单击作出反应的功能。像这样:

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

您可以通过将自定义函数作为
selectDoubleClick
交互的
condition
传递来执行此操作。检查所选特征并在未选择特征时对双击作出反应,在有所选特征时对单击作出反应的功能。像这样:

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

在我的解决问题版本中,我使用了@ahocevar的部分代码 我的解决办法很简单。首先,如果存在指向此交互的任何getFeature链接(选择双击),然后清除此功能

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

如果单击了地图并清除了功能,则最好让事件侦听

在我的解决问题版本中,我使用了@ahocevar的部分代码
var concludeClickEdit = function(eventListener) {
    if(selectDoubleClick.getFeatures().getLength() !== 0){
             selectDoubleClick.getFeatures().clear();
          }
}
我的解决办法很简单。首先,如果存在指向此交互的任何getFeature链接(选择双击),然后清除此功能

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

如果单击了地图并清除了功能,则最好让事件侦听

您正在将这两个功能分配给双击和
返回功能在您放置它的位置没有意义。它应该在样式函数中吗?我们甚至不知道你的地图是什么样子,所以你能给我们一个活生生的例子,让我们帮助你吗?是的,这是真的,伊卡洛斯,我的错误,但错误还在继续。当我用双击取消选择所选的功能时,我也必须用两次单击取消选择。您将两者都指定为双击,并且
返回功能在您放置它的位置没有意义。它应该在样式函数中吗?我们甚至不知道你的地图是什么样子,所以你能给我们一个活生生的例子,让我们帮助你吗?是的,这是真的,伊卡洛斯,我的错误,但错误还在继续。当我用双击取消选择所选功能时,我也必须用两次单击取消选择。谢谢verry mutch@ahocevar,但这种方式不是最好的使用方式,因为我们一直在从地图浏览器(mapBrowserEvent)读取值,对我来说不是最好的方法。不确定你的意思是什么-交互将
mapBrowserEvent
传递给条件函数。是的,我知道,但没有使用该函数。最好清除该交互选择的功能谢谢verry mutch@ahocevar,但这种方式不是最好的使用方式,因为我们一直在从地图浏览器(mapBrowserEvent)读取值,对我来说不是最好的方法。不确定你的意思是什么-交互将
mapBrowserEvent
传递给条件函数。是的,我知道,但没有使用该函数。最好清除该交互选择的功能
var concludeClickEdit = function(eventListener) {
    if(selectDoubleClick.getFeatures().getLength() !== 0){
             selectDoubleClick.getFeatures().clear();
          }
}