Javascript 如何为Openlayer 3映射正确调度事件?

Javascript 如何为Openlayer 3映射正确调度事件?,javascript,events,click,openlayers-3,dispatch,Javascript,Events,Click,Openlayers 3,Dispatch,我有一张地图,上面有一些覆盖图(带有文本内容的div)。我已为地图注册了“单击”事件,如: map.on('click', function(evt) { var click_coordinates = evt.coordinate; }); 它可以正常工作,直到用户单击覆盖。在这种情况下,事件可能会被覆盖捕获,但不会传播到贴图。在某些情况下是可以的,但有时我需要由映射来处理事件。因此,我捕获覆盖上的单击事件,并尝试通过 map.dispatchEvent("click"); 好的

我有一张地图,上面有一些覆盖图(带有文本内容的div)。我已为地图注册了“单击”事件,如:

map.on('click', function(evt) { 
    var click_coordinates = evt.coordinate;
});
它可以正常工作,直到用户单击覆盖。在这种情况下,事件可能会被覆盖捕获,但不会传播到贴图。在某些情况下是可以的,但有时我需要由映射来处理事件。因此,我捕获覆盖上的单击事件,并尝试通过

map.dispatchEvent("click");

好的是,地图上的事件被触发了,不幸的是,它与最初的对象“不同”,因为它不包含“坐标”属性和其他Openlayers内容。有没有一种方法,如何以与在地图上自然单击相同的方式发送事件?

您可以通过以下方式实现:

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

可能我没有注意到这一点,但这将为我提供标准的事件对象,而不是OL-even对象(例如,缺少evt.coordinate)。这意味着不能使用相同的过程来处理map click和object click,或者在传递到map.click过程之前,必须对object click事件进行预转换(例如,var coord=map.getCoordinateFromPixel(像素)以获取坐标)。这就是为什么我问“如何以与在地图上自然点击相同的方式发送事件”,因为我相信OL有一种自然的方式来做。然后你的回答是不,没有办法。在我的回答中,我说“你可以通过……来实现这一点。”