5

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

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

2 回答 2

6

tileloadstart自 OpenLayers v3.3 起,可以在 tile 源上订阅、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++;
});
于 2015-05-20T22:34:24.870 回答
1

到目前为止,您可以通过以下方式将其连接起来,直到将某些内容添加到核心中。

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);
        };
    })()); 

您可以在此处查看可以使用的所有图块源类:http: //openlayers.org/en/v3.4.0/apidoc/ol.source.TileImage.html?unstable= true#setTileLoadFunction

于 2015-04-03T22:30:43.957 回答