如何为Openlayer 3地图正确发送事件?

时间:2016-06-02 12:16:36

标签: javascript events click openlayers-3 dispatch

我有一张地图上有一些叠加(带有文字内容的DIV)。我为地图注册了“click”事件,如:

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

在用户点击叠加层之前,它可以正常工作。在这种情况下,事件可能被Overlay捕获,但它不会传播到地图。在某些情况下可以,但有时我需要事件由地图处理。所以我在Overlay上捕获click事件,然后尝试通过

将它发送到map元素
map.dispatchEvent("click");

好处是,地图上的事件被触发,不幸的是它是“不同的”对象,而不是原始因为它不包含“坐标”属性和其他Openlayers的东西。有没有办法,如何以与自然点击地图相同的方式发送事件?

1 个答案:

答案 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);
});