2017-01-30 2 views
0

Ich habe tow ol.interaction.Select, eine auf den einzelnen Klick und der andere, um zu klicken.Klicken Sie und doppelklicken Sie, deaktivieren Sie die Interaktion 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 
} 

Aber wenn ich den Doppelklick abwählen möchte, muss ich zweimal in der Karte klicken. Gibt es eine Möglichkeit, mit einem einzigen Klick die Doppelauswahl aufzuheben?

+0

Sie weisen beide auf Doppelklick und 'return feature;' macht keinen Sinn, wo Sie es platziert haben. Sollte es in der Style-Funktion sein? Wir wissen nicht einmal, wie Ihre Karte aussieht. Können Sie uns ein lebendes Beispiel geben, damit wir Ihnen helfen können? – Icarus

+0

Ja das ist wahr Icarus, mein Fehler, aber der Fehler geht weiter. Wenn ich das ausgewählte Feature mit Doppelklick abnehme, muss ich die Auswahl mit zwei Klicks aufheben. –

Antwort

0

In meiner Version lösen das Problem benutzte ich einen Teil des Codes von @ahocevar Meine Lösung ist einfach. Zunächst einmal, wenn es einen getFeature-Link zu dieser Interaktion gibt (selectDoubleClick), und dann diese Features löschen.

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

Ist es besser, ein Ereignis zu hören, wenn die Karte angeklickt wurde und dann die Funktionen löschen.

1

Sie können dies möglicherweise tun, indem Sie eine benutzerdefinierte Funktion als condition der selectDoubleClick Interaktion übergeben. Etwas, das nach ausgewählten Features sucht und auf einen Doppelklick reagiert, wenn keine Features ausgewählt sind, und auf einen einzelnen Klick, wenn ausgewählte Features vorhanden sind. Wie folgt aus:

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

Vielen Dank verry mutch @ahocevar, aber dieser Weg ist nicht der beste zu verwenden, weil wir immer die Werte aus dem Map-Browser (mapBrowserEvent) lesen, ist nicht der beste Weg für mich. –

+0

Nicht sicher, was Sie meinen - das 'mapBrowserEvent' wird von der Interaktion an die Bedingungsfunktion übergeben. – ahocevar

+0

ja ich weiß, aber hat diese Funktion nicht funktioniert. Es war besser, das Feature zu löschen, das von dieser Interaktion ausgewählt wurde –

Verwandte Themen