2016-06-02 1 views
-1

J'ai une carte avec quelques superpositions (DIVs avec un contenu de texte) dessus. J'ai "clic" événement enregistré pour la carte comme:Comment distribuer correctement l'événement pour la carte Openlayer 3?

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

Cela fonctionne très bien jusqu'à ce qu'un utilisateur clique sur une superposition. Dans ce cas, l'événement est probablement intercepté par l'Overlay, mais il n'est pas propagé sur la carte. C'est OK pour certaines situations, mais parfois j'ai besoin que l'événement soit géré par la carte. Donc, je prends l'événement click sur le recouvrement et j'essayer ne l'envoyer à l'élément de carte par

map.dispatchEvent("click"); 

La bonne chose est, l'événement sur la carte est tiré, malheureusement, il est l'objet « différent », que originaly comme il ne contient aucun attribut "coordonnée" et d'autres éléments Openlayers. Existe-t-il un moyen, comment répartir l'événement de la même manière que cliquer sur la carte?

Répondre

0

Vous pouvez réaliser avec ceci:

// 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); 
}); 

Ou simplement:

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

Probablement, je manque le point, mais cela me donnera objet événement standard au lieu de l'OL objet même (par exemple EVT .coordinate est manquant). Cela signifie que la même procédure ne peut pas être utilisée pour manipuler un clic de carte et un clic d'objet, ou qu'un événement de clic d'objet doit être pré-transformé (par exemple var coord = map.getCoordinateFromPixel (pixel) pour obtenir les coordonnées) avant de passer à map.click . C'est pourquoi je demandais «comment répartir l'événement de la même manière que le clic normal sur la carte», car je crois que l'OL a une façon naturelle de le faire. – user3523426

+0

Alors votre réponse est ** NON, il n'y a pas moyen de le faire **. –

+1

Dans ma réponse j'ai dit "Vous pouvez ** réaliser ** ceci avec ..." –