tileQueue has nothing to do with numLoadingTiles.

The tileQueue might have entries again after zooming when the previous zoom level hasn't finished loading yet. Removing the check for the tileQueue's length makes layers report loadend correctly again.
This commit is contained in:
ahocevar
2012-03-15 17:44:30 +01:00
parent bb6cf0c2d1
commit 193983b2b0
2 changed files with 74 additions and 1 deletions

View File

@@ -1061,7 +1061,7 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
this.numLoadingTiles--;
this.events.triggerEvent("tileloaded", {tile: tile});
//if that was the last tile, then trigger a 'loadend' on the layer
if (this.tileQueue.length === 0 && this.numLoadingTiles === 0) {
if (this.numLoadingTiles === 0) {
this.events.triggerEvent("loadend");
if(this.backBuffer) {
// the removal of the back buffer is delayed to prevent flash

73
tests/manual/loadend.html Normal file
View File

@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="../../theme/default/style.css" type="text/css">
<link rel="stylesheet" href="../../examples/style.css" type="text/css">
<script src="../../lib/OpenLayers.js"></script>
<script type="text/javascript">
var lon = 5;
var lat = 40;
var zoom = 5;
var map, layer;
var numLoadingLayers = 0;
function init(){
map = new OpenLayers.Map( 'map' );
layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'});
layer.events.register('loadstart', this, onloadstart);
layer.events.register('loadend', this, onloadend);
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
}
function log(msg) {
document.getElementById("output").innerHTML += msg + "<br />";
}
function onloadstart(evt) {
numLoadingLayers++;
var msg = ['loadstart', '# layers loading:', numLoadingLayers].join(' ');
log (msg);
};
function onloadend(evt) {
numLoadingLayers--;
var msg = ['loadend ', '# layers loading:', numLoadingLayers].join(' ');
log (msg);
};
</script>
</head>
<body onload="init()">
<h1 id="title">WMS loadstart/loadend events</h1>
<div id="tags">
wms, layer, singletile
</div>
<p id="shortdesc">
Shows the loadstart and loadend events of a WMS layer
</p>
<div id="map" class="smallmap"></div>
<div id="docs">
<p>
This example is helpful in testing whether all loadstart events are followed
by a loadend event.
Test by using scroll-wheel up and down.
</p>
</div>
<h1>loadstart and loadend events</h1>
<pre id="output"></pre>
</body>
</html>