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;
}
},