我有一张地图上有一些叠加(带有文字内容的DIV)。我为地图注册了“click”事件,如:
map.on('click', function(evt) {
var click_coordinates = evt.coordinate;
});
在用户点击叠加层之前,它可以正常工作。在这种情况下,事件可能被Overlay捕获,但它不会传播到地图。在某些情况下可以,但有时我需要事件由地图处理。所以我在Overlay上捕获click事件,然后尝试通过
将它发送到map元素map.dispatchEvent("click");
好处是,地图上的事件被触发,不幸的是它是“不同的”对象,而不是原始因为它不包含“坐标”属性和其他Openlayers的东西。有没有办法,如何以与自然点击地图相同的方式发送事件?
答案 0 :(得分:0)
你可以用这个来实现:
// 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);
});
或者简单地说:
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);
});