2012-03-24 9 views
7

Es scheint, dass das Zeichnen von Polygonen in google maps api v3 asynchron ist. Versuchen Sie, die Schaltfläche „Laden“ in diesem Beispiel zu klicken:Griff, wenn das Zeichnen von Polygonen in Google Maps abgeschlossen ist api v3

http://jsfiddle.net/rmXXF/

der Text „done“ viel früher geschrieben als das Gitter gezogen wird! Es scheint, dass das Zeichnen eines Rechteckrasters asynchron ist. Ich möchte den Text FERTIG angezeigt werden, nachdem das Raster gezeichnet wurde! Gibt es einen Event-Handler dafür?

Der wichtige Teil des Codes ist in Funktion action():

polygons = draw_all_squares(map); // draw grid here 
document.getElementById('status').innerHTML = 'DONE'; // displayed 2 seconds 
                 // before the grid! 

Beachten Sie, dass ‚Leerlauf‘ Ereignis-Karte nicht für diese nicht funktioniert, weil die Karte nicht bewegt/Zoomen. Sie können hier versuchen: http://jsfiddle.net/92Hxj/

Vielleicht ist es etwas zu tun, nicht mit Google Maps hat aber mit Browser-Rendering? In jedem Fall sollte ein Event-Handler dafür vorhanden sein.

+0

Leider gibt es nicht. Was ist der Anwendungsfall? –

+1

@broady, der Anwendungsfall ist fast genau das, was Sie im Beispiel sehen, aber die Quadrate sind mit Ajax geladen. Ich setze die Statusanzeige auf "LOADING ..." vor der Ajax-Anfrage und setze sie wieder auf "DONE", nachdem ich die Daten bekommen und sie gerendert habe ... aber es funktioniert nicht - die Statusanzeige sagt "FERTIG "und Benutzer starrt ein paar Sekunden auf eine leere Karte. – TMS

Antwort

8

eine kleine Rückzentrier der Karte Durch das Auslösen nach all Polygone zeichnen diese auf die gleiche interne Google Maps Ereigniswarteschlange hinzugefügt werden, wie in diesem Beispiel zu sehen: http://jsfiddle.net/rmXXF/40/

google.maps.event.addListener(map, 'idle', function() { 
document.getElementById('status').innerHTML = 'DONE'; 
}); 

und

my_map.setCenter(new google.maps.LatLng(my_map.getCenter().lat(), my_map.getCenter().lng() + .000000001)); 
+0

Nice hack David, danke! – TMS

+2

Sehr nett, David. Ich würde eine Änderung vornehmen - verwenden Sie addListenerOnce –

+0

Brilliant Arbeit. –

3

Sie sollten ein Overlay verwenden und auf das Ereignis 'rectanglecomplete' des Zeichenmanagers hören. Ich kann nach dem Mittagessen ein Beispiel schreiben.

David hat Recht. Ich habe die Dokumentation falsch gelesen. Entschuldigen. Er sollte das Kopfgeld bekommen.

+0

Wow, sieht genau so aus wie das Ding, nach dem ich gesucht habe. Ein Beispiel wäre großartig! – TMS

+0

Die Belohnung muss bald belohnt werden ... Sie haben eine Chance, wenn Ihre Antwort vollständig ist. :-) – TMS

+0

Sie haben noch 20 Stunden. – TMS