Openlayers 3-交互和pointermove

Openlayers 3-交互和pointermove,openlayers,openlayers-3,Openlayers,Openlayers 3,当鼠标盖在某个功能中时,我试图激活一个交互 它工作得很好。。。问题是,如果您缓慢移动鼠标,则交互将保持活动状态 这是OL3上的一个bug,还是我应该用另一种方式 代码: 谢谢我同意@jonatas的观点,这似乎是一个bug 不过,有一个解决办法似乎可以解决你的工作 避免使用多行字符串。这使得ol3在鼠标位于该功能上时验证更加复杂 使用vectorSource.forEachFeatureInExtent(),然后使用鼠标坐标创建一个小矩形,并在每个方向上添加几米。这将确保鼠标“mbr”位于功能范

当鼠标盖在某个功能中时,我试图激活一个交互

它工作得很好。。。问题是,如果您缓慢移动鼠标,则交互将保持活动状态

这是OL3上的一个bug,还是我应该用另一种方式

代码:


谢谢

我同意@jonatas的观点,这似乎是一个bug

不过,有一个解决办法似乎可以解决你的工作

  • 避免使用多行字符串。这使得ol3在鼠标位于该功能上时验证更加复杂
  • 使用vectorSource.forEachFeatureInExtent(),然后使用鼠标坐标创建一个小矩形,并在每个方向上添加几米。这将确保鼠标“mbr”位于功能范围内。 请注意,我使用鼠标坐标+-5米来构建mbr。您必须调整以满足您的要求

  • 检查

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

    var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) {
      return feature;
    }, null, function(layer) {
      return layer == vectorLayer
    });
    
    最后一个参数添加了一个层过滤器,仅用于向量层上的命中检测功能


    更新的、正在工作的JSFIDLE:

    它看起来像一个bug。你可以向核心开发人员报告它。我会在
    setTimeout
    调用中包装最后一行,以便在处理pointermove事件后调用它:
    window.setTimeout(function(){olDraw.setActive(hit);},0);
    var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) {
      return feature;
    }, null, function(layer) {
      return layer == vectorLayer
    });