2013-08-25 4 views
26

Ich habe eine ziemlich anspruchsvolle Maps-Anwendung, die mehrere benutzerdefinierte Markierungen und dergleichen behandelt. Ich habe eine Funktion namens resizeWindow, die ich in einem Listener aufrufen, wenn der Bildschirm geändert wird, zeichnet die Karte sich selbst durch Berechnen neuer Grenzen und Erzwingen einer Größenänderung. Es sieht wie folgt aus:Wie erzwinge ich das erneute Zeichnen mit Google Maps API v3.0?

window.onresize = function(event) { fitmap(); }; 

und die Funktion, um die Größe ist:

function fitmap(id) { 
    var coords = []; 
    var newlatlng = new google.maps.LatLng(projlat, projlng); 
    coords.push(newlatlng); 

     for (var i=0; i<markers[id].length; i++) { 
      newlatlng = new google.maps.LatLng(markers[id][i].latitude, markers[id][i].longitude); 
      coords.push(newlatlng); 
     } 
    } 

    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0, LtLgLen = coords.length; i < LtLgLen; i++) { 
     bounds.extend (coords[i]); 
    } 
    map.fitBounds(bounds); 

und das funktioniert gut, wenn ich das Fenster tatsächlich ändern. Aber ...

Ich habe ein Menü auf der rechten Seite des Fensters. Ich benutze jquery.animate, um das Menü vom Bildschirm zu entfernen. Ich nenne die Fitmap-Funktion als einen Schritt-Prozess (oder nur einmal am Ende) und es wird die Karte nicht neu zeichnen.

$('#rightSide').animate({ right:"-240px" }, { 
    duration:1000, 
    step: function(now,fx) { 
     fitmap(); 
    } 
}); 

Ich habe auf diese lesen und lesen, und es scheint, dass es eine Kuriosität von Google Maps API v3.0 ist, dass wenn sich nichts ändert eigentlich nicht passieren wird neu erstellt. In diesem Fall ändert sich mein verfügbares Fenster von Bildschirmbreite - Menü zum tatsächlichen Vollbild. Es findet jedoch kein Redraw statt.

Ich habe versucht google.maps.event.trigger (map, 'resize'); und das funktioniert auch nicht.

Gibt es eine Möglichkeit, Google Maps neu zu erzwingen?

+0

Können Sie uns einen Link geben? –

+0

Es gibt eine kleine Registerkarte oben links im Menü auf der rechten Seite. –

+0

Wenn Sie Ihr Browser-Fenster auf eine Größe eingestellt haben, die eine Änderung des Zooms erzwingt, funktioniert es auch. Nur wenn keine Zoomänderung erforderlich ist, wird sie nicht angepasst. Ich habe auch versucht, ein 1-Schritt-Zoom-out und Zoom-in-Zoom, aber das hat es nicht behoben. –

Antwort

59

google.maps.event.trigger(MapInstance,'resize') funktioniert gut für mich, legte es am Anfang der Funktion fitMap.

Was Sie vermissen:

derzeit (nicht im Code oben gepostet, in der Live-Code), rufen Sie resizeWindow auf jeder step. Wenn Sie diese Funktion unter step aufrufen, wird die Funktion aufgerufen, bevor die Animation für den aktuellen Schritt beendet ist. Das Ergebnis ist, dass resizeWindow nicht aufgerufen wird, wenn die vollständige Animation beendet wurde, wird es z. ein Rand auf der rechten Seite der Karte.

Lösung: Anruf resizeWindow auch auf dem complete-Rückruf des animation.

+0

Ah. Vielen Dank! Ich hatte vergessen, welche Kopie des Codes ich dort auf Test legte. Ich habe alles versucht. Aber ich wusste nicht, dass die Schrittfunktion VOR dem Schritt aufgerufen wurde. –