2017-08-13 103 views
1

点击事件,我在重绘事件style.load层和去除层双与mapbox GL

 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(“点击”)事件?当我点击Popup()显示2次时。而且,当我更改第一层onclick事件触发3次时,依此类推。所以我想我必须删除点击事件,但如何?谢谢

回答

2

您可能想使用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 
 
    }); 
 
    } 
 
}