[英]Leaflet - Event on tiles loading
我目前正在開發一個基於地圖的應用程序,當Leaflet
從TileProvider
(在我的例子中是MapBox
)中拉出切片時需要一種方法來獲得通知。 我閱讀了Leaflet文檔 ,特別是TileLayer的部分。 目前,我使用以下代碼附加tileload
處理程序:
map.eachLayer(function (layer) {
layer.on('tileload', function(e) {
console.log(e);
});
});
有沒有更好的方法來獲取當前地圖的TileLayer
? 這種方法的一個問題是我將處理程序掛鈎到所有層(雖然只有TileLayers
會引發事件,所以將所有層掛鈎它都是不干凈的)。 或者我可以將處理程序直接附加到地圖實例嗎?
我使用以下MapBox
代碼片段初始化地圖:
map = L.mapbox.map( element, '...', mapOptions );
這會自動創建TileLayer
(以及其他幾個圖層),將它們附加到map
對象並返回此對象供以后使用。
為什么不直接在tile圖層上使用tileload事件,如下所示:
//create a variable to store the tilelayer
var osm = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
//add the tileload event directly to that variable
osm.on('tileload', function (e) {
console.log(e);
});
如果您有很多L.mapbox.TileLayer
實例,並且您不想手動將事件處理程序添加到每個實例,例如Alexandru Pufan在他的回答中建議您仍然可以使用循環和Object
的instanceof
方法:
map.eachLayer(function (layer) {
if (layer instanceof L.mapbox.TileLayer) {
layer.on('tileload', function(e) {
console.log(e);
});
}
});
在閱讀你對Alexandru的答案的評論之后,我猜你只有一層,那么最好將它手動添加到實例中,這可以使用L.mapbox.TileLayer
這樣:
var layer = L.mapbox.tileLayer(YOUR MAP ID);
layer.on('tileload', function(e) {
console.log(e);
});
var map = L.mapbox.map('mapbox', null, {
'center': [0, 0],
'zoom': 0,
'layers': [layer]
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.