2017-01-30 37 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

是的,我知道但沒有工作的功能。清除由該交互選擇的功能會更好 –