Openlayers 3 - 交互和指针移动

时间:2016-07-25 16:38:24

标签: openlayers openlayers-3

当鼠标悬停在某个功能内部时,我尝试激活互动。

它正在工作......问题是如果你慢慢移动鼠标,交互保持活跃。

它是OL3上的错误,还是应该以不同的方式进行?

代码:http://jsfiddle.net/gmaq54dm/3/

olMap.on("pointermove", function (e) {
    if (e.dragging) {
        return;
    }
    var map = e.map;
    console.log(e.pixel);
    var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) {
      return feature;
    });
    var hit = (feature) ? true : false;
    console.log(hit);
    olDraw.setActive(hit);
});

由于

2 个答案:

答案 0 :(得分:2)

这是您的应用程序中的错误,而不是OpenLayers中的错误。您需要确保仅从矢量图层中点击检测要素,而不是从绘图图层中点击检测要素。将您的forEachFeatureAtPixel功能更改为

var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) {
  return feature;
}, null, function(layer) {
  return layer == vectorLayer
});

最后一个参数只为矢量图层上的命中检测功能添加了一个图层过滤器。

更新,工作JSFiddle:http://jsfiddle.net/gmaq54dm/4/

答案 1 :(得分:0)

我同意@jonatas,这似乎是一个错误。

尽管如此,有一种解决方法可以帮助您完成工作。

  1. 避免使用多行字符串。这使得ol3验证鼠标何时在功能上时更加复杂。
  2. 使用vectorSource.forEachFeatureInExtent(,然后使用鼠标坐标创建一个小矩形,并在每个方向上添加几米。这将确保您的鼠标" mbr"落在这些功能之内。 请注意我从鼠标坐标使用+ -5米来构建mbr。你必须调整以满足你的要求。
  3. 检查fiddle here