2016-08-08 23 views
1

Ich verwende eine ol.interaction.Draw, um neue Features auf eine Karte zu zeichnen, aber es gibt auch bereits vorhandene Funktionen auf der Karte. Ich möchte, dass der Benutzer keine neue Funktion platzieren kann, wenn sich die Maus über einer vorhandenen Funktion befindet.ol.interaction.Draw Zustand bei Mausbewegung?

Für jetzt verwende ich eine condition auf die Draw-Interaktion, die false zurückgibt, wenn es auf ein Pixel gesetzt wird, wo es bereits ein Feature gibt. Aber wenn man die Maus nur über diese Pixel bewegt, sieht das so aus, als ob der Benutzer dort einen Marker platzieren könnte. Gibt es so etwas wie condition, das bei jeder Mausbewegung nicht nur auf einen Klick überprüft wird?

Update: mein aktueller Zustand ist:

condition: function(e) { 
    var isFirstOne = true; 
    var feature = map.forEachFeatureAtPixel(e.pixel, function(feature) { 
    var n = feature.get('name'); 
    // if n is undefined, feature is the current drawing one 
    if (!!n) return feature; 
    }); 
    return (!feature); 
} 
+0

können Sie den Code für die 'condition' Sie verwenden? –

+0

@HichamZouarhi: Ich aktualisierte die Frage – levu

+0

Sie können den Stil der Zeicheninteraktion innerhalb Ihrer Bedingung ändern, jedoch konnte ich keine vordefinierte Funktion finden, um das in OL3 zu tun –

Antwort

1

Gibt es so etwas wie Bedingung, die auf einem Klick nicht nur bei jeder Mausbewegung aktiviert ist?

Ja, können Sie pointermove, verwenden und die Cursor (via CSS) ändern:

map.on('pointermove', function(e) { 
    if (e.dragging) return; 
    var hit = map.hasFeatureAtPixel(map.getEventPixel(e.originalEvent)); 
    map.getTargetElement().style.cursor = hit ? 'pointer' : ''; 
});