使用mapbox gl双击事件

使用mapbox gl双击事件,mapbox,mapbox-gl-js,mapbox-gl,Mapbox,Mapbox Gl Js,Mapbox Gl,我正在style.load事件上重新绘制图层并删除图层 map.on('style.load', function() { loadByBounds(tempBounds) }); function loadByBounds(b) { if (map.getLayer("cluster-count")) { map.removeLayer("cluste

我正在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')事件?当我单击该点时,弹出窗口()显示2次。当我再次改变图层时,onclick事件会触发3次,以此类推。因此,我认为我必须删除点击事件,但如何删除?谢谢

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

使用
map.off()。但是,为了使用
map.off()
,您需要添加不带匿名函数的事件侦听器

//您需要使用命名函数
函数clickHandler(e){
//手柄点击
}
map.on('click',clickHandler);
//然后你可以用
map.off('click',clickHandler);
//使用匿名函数,您将无法使用map.off
地图上('点击',(e)=>{
//手柄点击
});