2016-07-25 20 views
3

Ich versuche, eine Interaktion zu aktivieren, wenn der Mouseover innerhalb einer Funktion ist.Openlayers 3 - Interaktion und pointermove

Es funktioniert so so ... das Problem ist, wenn Sie Ihre Maus langsam bewegen die Interaktion aktiv bleiben.

Ist es ein Fehler auf OL3, oder sollte ich es anders machen?

Code: http://jsfiddle.net/gmaq54dm/3/

olMap.on("pointermove", function (e) { 
    if (e.dragging) { 
     return; 
    } 
    var map = e.map; 
    console.log(e.pixel); 
    var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { 
     return feature; 
    }); 
    var hit = (feature) ? true : false; 
    console.log(hit); 
    olDraw.setActive(hit); 
}); 

Dank

+0

Es sieht aus wie ein Fehler. Sie könnten die Kernentwickler darüber informieren. –

+0

Ich würde die letzte Zeile in einem 'setTimeout'-Aufruf umbrechen, so dass es nach der Behandlung des pointermove- Ereignisses aufgerufen wird:' window.setTimeout (function() {olDraw.setActive (hit);}, 0); ' – ahocevar

Antwort

2

Dies ist ein Fehler in der Anwendung ist, nicht in Openlayers. Sie müssen sicherstellen, dass Sie Features nur von Ihrer Vektorebene und nicht von der Zeichenebene aus erkennen. Ändern Sie Ihre forEachFeatureAtPixel Funktion

var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { 
    return feature; 
}, null, function(layer) { 
    return layer == vectorLayer 
}); 

Das letzte Argument fügt eine Schicht-Filter nur getroffen Erkennung Features auf der Vektorebene.

Aktualisiert, funktioniert JSFiddle: http://jsfiddle.net/gmaq54dm/4/

+0

Danke Andreas !!! Es funktioniert perfekt !!! –

0

ich mit @jonatas einverstanden sind, scheint es ein Fehler zu sein.

Es gibt jedoch einen Workaround, der Ihre Arbeit zu erledigen scheint.

  1. Vermeiden Sie mehrzeilige Zeichenfolge. Es macht es für ol3 komplizierter zu überprüfen, wenn sich die Maus über der Funktion befindet.
  2. Verwenden Sie vectorSource.forEachFeatureInExtent( und dann ein kleines Rechteck mit Mauskoordinaten erstellen und ein paar Meter in jeder Richtung hinzufügen. Dadurch wird sichergestellt, dass Ihre Maus "mbr" in die Features fällt. Bitte beachten Sie, dass ich + -5 Meter von Mauskoordinaten verwenden, um die mbr zu bauen. Sie müssen anpassen, um Ihre Anforderung zu erfüllen.

Kontrolle des fiddle here

+0

Schön! !! Ich werde es versuchen. Danke –