diff --git a/examples/fullScreen.js b/examples/fullScreen.js index 754cabfadd..3d9fa6ce5b 100644 --- a/examples/fullScreen.js +++ b/examples/fullScreen.js @@ -1,20 +1,9 @@ -var urls = [ - "http://a.tile.openstreetmap.org/${z}/${x}/${y}.png", - "http://b.tile.openstreetmap.org/${z}/${x}/${y}.png", - "http://c.tile.openstreetmap.org/${z}/${x}/${y}.png" -]; - 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, - attribution: "Data CC-By-SA by OpenStreetMap" - }), - new OpenLayers.Layer.XYZ("OSM (without buffer)", urls, { - transitionEffect: "resize", buffer: 0, sphericalMercator: true, - attribution: "Data CC-By-SA by OpenStreetMap" - }) + new OpenLayers.Layer.OSM("OSM (without buffer)"), + new OpenLayers.Layer.OSM("OSM (with buffer)", null, {buffer: 2}) ], controls: [ new OpenLayers.Control.Navigation({ 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; } },