Events OpenLayers 3捕获加载的平铺事件

Events OpenLayers 3捕获加载的平铺事件,events,event-handling,openlayers,gis,openlayers-3,Events,Event Handling,Openlayers,Gis,Openlayers 3,如何捕获OpenLayers 3中加载的tiles事件?在OpenLayers 2中,这可以通过从地图的底层捕捉“loadend”事件来完成: map.baseLayer.events.register('loadend' , false, function(){ }); 从现在起,您可以通过以下方式将其连接起来,直到有东西添加到核心中 tileSource.setTileLoadFunction(( function(){ var numLoadingTiles = 0;

如何捕获OpenLayers 3中加载的tiles事件?在OpenLayers 2中,这可以通过从地图的底层捕捉“loadend”事件来完成:

map.baseLayer.events.register('loadend' , false, function(){  });

从现在起,您可以通过以下方式将其连接起来,直到有东西添加到核心中

tileSource.setTileLoadFunction(( function(){
        var numLoadingTiles = 0;
        var tileLoadFn = tileSource.getTileLoadFunction();
        return (tile, src) => {
            console.log(src);
            if (numLoadingTiles === 0) {
                console.log('loading');
            }
            ++numLoadingTiles;
            var image = tile.getImage();

            image.onload = image.onerror =  function(){
                --numLoadingTiles;
                if (numLoadingTiles === 0) {
                    console.log('idle');
                }
            };
            tileLoadFn(tile, src);
        };
    })()); 
您可以在此处看到可用于此的所有平铺源类:
从OpenLayers v3.3开始,可以在磁贴源上订阅
tileloadstart
tileloadend
tileloaderror
事件

您可以使用类似于以下内容的内容:

var tilesLoading = 0,
    tilesLoaded = 0;

tileLayer.getSource().on('tileloadend', function () {
    tilesLoaded++;
    if (tilesLoading === tilesLoaded) {
        console.log(tilesLoaded + ' tiles finished loading');
        tilesLoading = 0;
        tilesLoaded = 0;
        //trigger another event, do something etc...
    }
});

tileLayer.getSource().on('tileloadstart', function () {
    this.tilesLoading++;
});

这是一个很好的问题。我刚刚花了一些时间对源代码进行了灰色处理,并且在renderer/layerrender.js中是一个opt_tileCallback方法,但是我不知道如何首先附加到这个方法,也没有时间进一步研究。同样的问题。有人知道吗?ol开发者的状态更新: