我目前正在开发基于 map 的应用程序,需要一种方法来在LeafletTileProvider(在我的情况下为MapBox)中提取图块时得到通知。我读了Leaflet documentation,尤其是TileLayer的那部分。当前,我正在使用以下代码附加tileload处理程序:

map.eachLayer(function (layer) {
    layer.on('tileload', function(e) {
        console.log(e);
    });
});

有没有更好的方法来获取当前 map 的TileLayer?这种方法的一个问题是我将处理程序挂接到了所有层(尽管只有TileLayers会引发事件,但是将其挂接到所有层也是不干净的)。还是可以通过某种方式将处理程序直接附加到 map 实例?

更新资料

我使用以下MapBox代码片段初始化 map :
map = L.mapbox.map( element, '...', mapOptions );

这将自动创建一个TileLayer(和其他几个图层),将它们附加到map对象,并返回此对象以供以后使用。

最佳答案

如果您有很多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]
});

07-24 16:18