我目前正在开发基于 map 的应用程序,需要一种方法来在Leaflet
从TileProvider
(在我的情况下为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在他的答案中建议的那样,将事件处理程序手动添加到每个实例,您仍然可以使用循环和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]
});