2016-06-02 14 views
-1

Ich habe eine Karte mit einigen Overlays (DIVs mit einem Textinhalt) darauf. Ich habe "Klick" -Event für die Karte wie registriert:Wie ordne ich das Event für die Openlayer 3-Karte richtig ein?

map.on('click', function(evt) { 
    var click_coordinates = evt.coordinate; 
}); 

Es funktioniert gut, bis ein Benutzer auf ein Overlay klicken. In diesem Fall wird das Ereignis wahrscheinlich vom Overlay abgefangen, es wird jedoch nicht auf die Karte übertragen. Für einige Situationen ist es in Ordnung, aber manchmal muss das Ereignis von der Karte gehandhabt werden. Also fange ich das Click-Ereignis auf dem Overlay und ich versuche, es nicht senden an das Kartenelement durch

map.dispatchEvent("click"); 

Die gute Sache ist, wird das Ereignis auf der Karte gebrannt, leider ist es „anders“ Objekt, als originaly als Es enthält kein "Koordinaten" -Attribut und andere Openlayer-Sachen. Gibt es eine Möglichkeit, das Ereignis auf die gleiche Weise zu versenden wie ein natürlicher Klick auf die Karte?

Antwort

0

Sie können mit diesem erreichen:

// content is ol.Overlay#element therefore a DOM element 
content.addEventListener('click', function(evt){ 
    map.dispatchEvent(evt); 
}); 

map.on('click', function(evt){ 
    var pixel = [evt.clientX, evt.clientY]; 
    var coord = map.getCoordinateFromPixel(pixel); 

    console.info('event', evt); 
    console.info('pixel', pixel); 
    console.info('coord', coord); 
}); 

Oder einfach:

content.addEventListener('click', function(evt){ 
    var pixel = [evt.clientX, evt.clientY]; 
    var coord = map.getCoordinateFromPixel(pixel); 

    console.info('event', evt); 
    console.info('pixel', pixel); 
    console.info('coord', coord); 
}); 
+0

Wahrscheinlich, ich den Punkt bin fehlt, aber das gibt mir Standard-Event-Objekt statt OL sogar Objekt (zB evt .koordinate fehlt). Dies bedeutet, dass dieselbe Prozedur nicht für die Verarbeitung von Kartenklick und Objektklick verwendet werden kann oder ein Objektklickereignis vor der Übergabe an die map.click-Prozedur vortransformiert werden muss (z. B. var coord = map.getCoordinateFromPixel (Pixel) zum Abrufen der Koordinaten) . Deshalb habe ich gefragt, "wie man das Ereignis auf die gleiche Weise wie ein natürlicher Klick auf die Karte verschickt", wie ich glaube, OL hat eine natürliche Art, es zu tun. – user3523426

+0

Dann ist deine Antwort ** NEIN, es gibt keine Möglichkeit es zu tun **. –

+1

In meiner Antwort sagte ich "Du kannst ** das mit ... erreichen" –