【问题标题】:OpenLayers 3: Remove event listenerOpenLayers 3:移除事件监听器
【发布时间】:2015-08-27 15:16:04
【问题描述】:

Openlayers 3 中如何移除这样附加的事件监听器:

var a = map.on("pointerdrag",function (e) {
             // event handler
});

var b = map.on("pointerdrag",function (e) {
             // event handler
});

如何仅删除侦听器 a 并保持 b 处于活动状态?

【问题讨论】:

    标签: javascript openlayers-3


    【解决方案1】:

    啊,很简单!它在API Docs:unByKey 中,但是对于关闭函数来说非常违反直觉的名称。

    所以要移除事件监听器a

    map.unByKey(a);
    

    将删除a 侦听器,但保持b 开启。

    注意:这将适用于 Open Layers 3 中任何发出事件的对象。比如图层、交互等等。

    【讨论】:

    • 请注意,如果您使用的是命名函数,您也可以使用.unfunction onPointerDragOne() {/*do stuf*/}function onPointerDragTwo() {/*do stuf*/}map.on("pointerdrag", onPointerDragOne);map.on("pointerdrag", onPointerDragTwo);map.un("pointerdrag", onPointerDragOne);// Only onPointerDragTwo will run
    【解决方案2】:

    我只是想知道同样的事情,似乎off 将是删除事件侦听器的合适方法。也可以直接在事件回调中调用:

    map.on("pointerdrag", function (e) {
        map.unByKey(e);
    });
    

    这应该只删除这个特定的事件。

    【讨论】:

    • 我为什么要这么做?