Mehr

Wie man eine Verzögerung macht, um auf das Laden der Karte zu warten


Mit welchem ​​Code könnte ich warten, bis das Programm die Karte nach dem ZoomIn-Befehl zuerst lädt?

Hier ist ein Teil meines Codes.

for (var z = zoomfrom; z <= zoomto; z++) { var scale = MapPanel.map.getScale(); var zoomlevel = MapPanel.map.getZoom(); NewZoomLevel = getzoomlevel(scale); lat1 = lat2tile(coords.top, NewZoomLevel); lat2 = lat2tile(coords.bottom, NewZoomLevel); long1 = long2tile(coords.left, NewZoomLevel); long2 = long2tile(coords.right, NewZoomLevel); for (var x= lat1; x<=lat2; x++) { for (var y= long1; y<=long2; y++) { list = list + startlink + zoomlevel + '/' + x + '/' + y + '
'; } //y für } //x für MapPanel.map.zoomIn(); // dieser Teil hoffe, einen Code zu setzen, der darauf wartet, dass die Karte nach ZoomIn geladen wird }; // z für

Ich habe versucht, die verzögerte Funktion von extjs zu verwenden, aber ohne Erfolg.


Aufgrund der asynchronen Natur von JavaScript können Sie die Codeausführung nicht "verzögern", um auf das Eintreten eines bestimmten Ereignisses zu warten. Sie müssen Abschlussrückrufe verwenden.OpenLayers.Maphat eine Reihe von Veranstaltungen, die Sie sich anhören können, diejenige, die Sie brauchen, istzoomend:

zoomend ausgelöst, nachdem ein Zoom abgeschlossen ist

Hier ist ein einfaches Beispiel basierend auf Ihrem Code:

var map = MapPanel.map; map.events.register('zoomend', map, function() { console.log('Zoom abgeschlossen!'); }); console.log('Über das Vergrößern'); map.zoomIn(); console.log('Zoom in gestartet');

Sie können es direkt in Ihrem Browser testen, indem Sie den obigen Code (ohne die erste Zeile) in die JavaScript-Konsole auf http://openlayers.org/ einfügen. Die Ausgabe bestätigt, dass die Ausführungsreihenfolge Ihren Erwartungen entspricht:

Vergrößern gerade

Zoom gestartet

Zoom fertig!


Es ist jedoch nicht klar, was Sie benötigenaufführenvariabel für - je nachdem ob Sie es nutzen möchten Vor oder nach dem des Zoom-Ereignisses müssen Sie möglicherweise Ihren Code ein wenig ändern.


In Openlayers gibt es ladend -Ereignis, um Layer zu hören und nicht zuzuordnen, wenn es geladen wird, überprüfen Sie den folgenden Code und Link:

var mylayer ="//Openlayers Layer-Objekt mylayer.events.register("loadend", mylayer, function() { console.log('layer loading'); });

Verknüpfung: http://dev.openlayers.org/examples/layerLoadMonitoring.html