2017-01-30 1 views
0

나는 .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

두 번 클릭하면 모두 할당되며'return feature; '는 두 번 클릭했을 때 의미가 없습니다. 스타일 함수 안에 있어야합니까? 우리는 당신의지도가 어떻게 생겼는지조차 모릅니다. 그래서 우리가 당신을 돕기 위해 살아있는 모범을 보여줄 수 있습니까? – Icarus

+0

그렇습니다. 이카루스, 실수.하지만 오류는 계속됩니다. 더블 클릭으로 선택된 기능을 선택 해제 할 때 두 번의 클릭으로 선택을 취소해야합니다. –

답변

0

난 내 솔루션은 간단하다 @ahocevar에서 코드의 일부를 사용했다. 먼저이 상호 작용 (selectDoubleClick)에 대한 getFeature 링크가 존재하면이 기능을 지우십시오.

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

지도를 클릭하고 기능을 지우는 경우 이벤트를 수신하는 것이 좋습니다.

1

사용자 지정 함수를 condition (selectDoubleClick 상호 작용)으로 전달하면 가능할 수도 있습니다. 선택한 기능을 확인하고 기능이 선택되지 않은 경우 두 번 클릭하여 반응하고 선택한 기능이있을 때 한 번 클릭합니다. 이 같은 문제를 해결 내 버전에서

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

예 알고 있지만 그 기능을 작동하지 않았다. 해당 상호 작용에서 선택한 기능을 삭제하는 것이 좋습니다. –

관련 문제