javascript - 如何在 OpenLayers 3 中删除监听器

标签 javascript openlayers-3

我做了一个 copy我在 stackoverflow 上的问题,因为在 gis.stackexchange 上,我所有的问题都没有引起任何注意——很多时候我无法在那里得到简单问题的答案。所以,我现在的问题是如何删除以这种方式定义的监听器:

map.getViewport().addEventListener('click', function (e){
   console.log("clicked");      
}); 

最佳答案

OL3 会发出您可以使用的自己的事件类型,并且为了回答您最初的问题,提供了一种简单快捷的方法来注销它们。

看这个例子:http://openlayers.org/en/v3.13.0/examples/vector-layer.html

更具体地说,在这些行:

  map.on('pointermove', function(evt) {
    if (evt.dragging) {
      return;
    }
    var pixel = map.getEventPixel(evt.originalEvent);
    displayFeatureInfo(pixel);
  });

  map.on('click', function(evt) {
    displayFeatureInfo(evt.pixel);
  });

ol.Map 对象有一个 on 方法,您可以使用该方法在 ol3 map 浏览器事件上注册事件监听器。最好使用这些事件而不是标准的浏览器事件。在此处查看所有 map 浏览器事件的列表:http://openlayers.org/en/v3.13.0/apidoc/ol.MapBrowserEvent.html

注销,您可以:

a) 使用un 方法,但要确保您提供相同的回调方法 作为第二个参数。换句话说:

  var callback = function(evt) {
    displayFeatureInfo(evt.pixel);
  };
  map.on('click', callback);
  map.un('click', callback);

b) 另一种方法是使用我非常喜欢的ol.Observable.unByKey 方法。当调用 ononce 时,它返回一个引用该事件的键。然后您可以使用该键取消收听您的事件:

  var key = map.on('click', function(evt) {
    displayFeatureInfo(evt.pixel);
  });
  ol.Observable.unByKey(key);

我发现 b) 更友好,因为您可以注册一堆事件监听器并将所有键放在一个数组中。当你想全部取消注册时,在数组中循环调用unByKey方法,然后清空数组。与必须手动注销所有事件相比,这种方式生成的代码更少。

关于javascript - 如何在 OpenLayers 3 中删除监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35015174/

相关文章:

qt - wkhtmltopdf OpenLayers V3 失败

php - href 与 onclick javascript 弹出窗口

javascript - 有没有办法在剩余参数的输出中保留空格?

javascript - 使用 SCORM 时的非 iframe html 转换

openlayers-3 - 打开和关闭 MouseWheelZoom

gis - Openlayers 3 为什么地理引用图像在最新的 OL3 版本中放置得不好?

javascript - turf.js OpenLayers3 Draw 中自相交多边形的相交错误

javascript - 开放层 3 : How to change/set the style of vector map

javascript - 如何隐藏此 css 下拉嵌套列表中的第三个嵌套列表?

javascript - 通过标签 html 中的照片列表进行更改