2017-01-30 38 views
0

我已经拖动ol.interaction.Select,一个用于单击,另一个用于双击。单击并双击,取消选择交互OpenLayers 3

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 
} 

但是,当我想取消选择双击,我必须在地图上点击两次。只需单击一次,双击就可以取消选择任何方式?

+0

您正在分配双击和'返回功能;'没有意义您放置它的位置。它应该在样式函数中吗?我们甚至不知道你的地图是怎么样的,所以你能给我们一个生动的例子,以便我们帮助你吗? – Icarus

+0

是的,这是真的伊卡洛斯,我的错误,但错误仍在继续。当我取消选择通过双击选择的功能时,我也必须取消选择两次点击。 –

回答

0

在我的版本解决的问题我使用的代码的某些部分从@ahocevar 我的办法很简单。首先,如果存在任何getFeature链接到此交互(selectDoubleClick),然后清除此功能。

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

如果地图被点击并清除特征,最好有一个事件监听。

1

您可以通过传递selectDoubleClick交互的condition自定义函数来完成此操作。某些功能会检查选定的功能,并在未选择功​​能时作出反应以便双击,并在有选定功能时单击。就像这样:

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

谢谢verry mutch @ahocevar,但这种方式并不是最好用的,因为我们从地图浏览器(mapBrowserEvent)读取所有值,不是最好的方式。 –

+0

不确定你的意思 - 通过交互将'mapBrowserEvent'传递给条件函数。 – ahocevar

+0

是的,我知道但没有工作的功能。清除由该交互选择的功能会更好 –