在 Mapbox GL-JS 中停止 map.on() 监听器

问题描述 投票:0回答:2

我很难理解如何在设置地图后停止事件侦听器。这里还有另外两个类似的问题,但经过努力我无法让它为我工作。

我设置事件监听器的代码很简单:

 map.on("move", function() {
    console.log("foo");
    }
  })

如何才能随意停止呢?我已经尝试过

map.off('move');
但这对我不起作用。我还查看了 mapbox 文档 的文档,但也没有运气。

文档显示我两者都需要:

  1. Type(字符串)要删除侦听器的事件类型。
  2. Listener (Function) 要删除的侦听器函数。

但是,我不知道我应该使用什么作为listener。 (这就是为什么我只能尝试

map.off('move');
)。

在这种情况下如何正确设置 .off() ?

mapbox mapbox-gl-js
2个回答
3
投票

像这样使用它:

const myfunc = () => console.log('foo');

map.on('move', myfunc);

map.off('move', myfunc);

您需要使用静态函数或将箭头函数分配给变量,以便能够使用完全相同的函数调用

off


0
投票

与接受的答案一样,您确实需要使用静态或箭头函数变量才能稍后删除事件侦听器。我们使用删除函数以及事件名称和相关函数的数组。

map.on("mousemove", singleSelect);

// Add to queue for later removal
window.mapEventListeners.push({eventName: "mousemove", functionName: singleSelect});

去除功能:

function removeCurrentMapEventListeners() {

    window.mapEventListeners.forEach((listenerInfo) => {
        districtingMap.off(listenerInfo.eventName, listenerInfo.functionName);
    });

    // reset
    window.mapEventListeners = [];

    // Also for DOM event listeners
    window.removeEventListener("keydown", handleAltKeyDown);
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.