gpt4 book ai didi

mapbox - 使用 mapbox gl 双击事件

转载 作者:行者123 更新时间:2023-12-04 03:04:43 28 4
gpt4 key购买 nike

我在 style.load 事件上重绘图层并移除图层

        map.on('style.load', function() {
loadByBounds(tempBounds)
});

function loadByBounds(b) {
if (map.getLayer("cluster-count")) {
map.removeLayer("cluster-count");
}
...
map.on('click', 'unclustered-point', function(e) {

var popup = new mapboxgl.Popup()
.setLngLat(e.features[0].geometry.coordinates)
.setHTML(text)
.addTo(map);
})}

但是如何删除 map.on('click') 事件呢?当我单击 Popup() 显示 2 次的点时。当我再次更改图层时,onclick 事件会触发 3 次,依此类推。所以我想我必须删除点击事件但是如何呢?谢谢

最佳答案

您可能想使用 map.once()。这将添加一个只对指定事件类型调用一次的监听器。但是,在触发 1 次点击事件后,此事件监听器将不再监听任何进一步的点击事件。

https://www.mapbox.com/mapbox-gl-js/api/#evented#once

使用 map.off() 它基本上与 map.on() 相反,您可以使用它来注销任何应用的事件监听器。但是,您需要添加不带匿名函数的事件监听器才能使用 map.off()

https://www.mapbox.com/mapbox-gl-js/api/#map#off

// you would need to use a named function
function clickHandler(e) {
// handle click
}

map.on('click', clickHandler);
// then you can use
map.off('click', clickHandler);

// With an anonymous function you won't be able to use map.off
map.on('click', (e) => {
// handle click
});

为防止您的应用注册多个监听器,您可能需要设置一个标志,该标志会在应用第一个事件监听器后设置。

let notListening = true;

function loadByBounds(b) {
// ....
if (notListening) {
notListening = false;
map.on('click', (e) => {
// do something
});
}
}

关于mapbox - 使用 mapbox gl 双击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663869/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com