diff --git a/examples/fullScreen.js b/examples/fullScreen.js index 754cabfadd..bd3ee3d57f 100644 --- a/examples/fullScreen.js +++ b/examples/fullScreen.js @@ -6,6 +6,7 @@ var urls = [ var map = new OpenLayers.Map({ div: "map", + tileManager: new OpenLayers.TileManager(), layers: [ new OpenLayers.Layer.XYZ("OSM (with buffer)", urls, { transitionEffect: "resize", buffer: 2, sphericalMercator: true, diff --git a/lib/OpenLayers/TileManager.js b/lib/OpenLayers/TileManager.js index 4ef5031919..69cf29d5b9 100644 --- a/lib/OpenLayers/TileManager.js +++ b/lib/OpenLayers/TileManager.js @@ -33,6 +33,20 @@ OpenLayers.TileManager = OpenLayers.Class({ */ cacheSize: 256, + /** + * APIProperty: tilesPerFrame + * {Number} Number of queued tiles to load per frame (see ). + * Default is 2. + */ + tilesPerFrame: 2, + + /** + * APIProperty: frameDelay + * {Number} Delay between tile loading frames (see ) in + * milliseconds. Default is 16. + */ + frameDelay: 16, + /** * APIProperty: moveDelay * {Number} Delay in milliseconds after a map's move event before loading @@ -251,7 +265,9 @@ OpenLayers.TileManager = OpenLayers.Class({ /** * Method: updateTimeout - * Applies the or to the loop. + * Applies the or to the loop, + * and schedules more queue processing after if there are still + * tiles in the queue. * * Parameters: * map - {} The map to update the timeout for @@ -259,10 +275,14 @@ OpenLayers.TileManager = OpenLayers.Class({ */ updateTimeout: function(map, delay) { window.clearTimeout(this.tileQueueId[map.id]); - if (this.tileQueue[map.id].length) { + var tileQueue = this.tileQueue[map.id]; + if (tileQueue.length) { this.tileQueueId[map.id] = window.setTimeout( OpenLayers.Function.bind(function() { this.drawTilesFromQueue(map); + if (tileQueue.length) { + this.updateTimeout(map, this.frameDelay); + } }, this), delay ); } @@ -341,8 +361,11 @@ OpenLayers.TileManager = OpenLayers.Class({ */ drawTilesFromQueue: function(map) { var tileQueue = this.tileQueue[map.id]; - while (tileQueue.length) { + var limit = this.tilesPerFrame; + var animating = map.zoomTween && map.zoomTween.playing; + while (!animating && tileQueue.length && limit) { tileQueue.shift().draw(true); + --limit; } },