2017-08-13 99 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 
 
    }); 
 
    } 
 
}