簡體   English   中英

宣傳單 - 瓷磚裝載事件

[英]Leaflet - Event on tiles loading

我目前正在開發一個基於地圖的應用程序,當LeafletTileProvider (在我的例子中是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在他的回答中建議您仍然可以使用循環和Objectinstanceof方法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM