Comment puis-je forcer redessiner avec Google Maps API v3. 0?

J'ai une application Maps assez sophistiquée qui gère plusieurs marqueurs personnalisés et autres. J'ai une fonction appelée resizeWindow que j'appelle un écouteur à chaque fois que l'écran est changé, la carte se redessine en calculant de nouvelles limites et en forçant un redimensionnement. Il ressemble à ceci:

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

Et la fonction de redimensionnement est:

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);

Et cela fonctionne très bien quand je redimensionne la fenêtre. Mais...

J'ai un menu qui descend du côté droit de la fenêtre. Je utilisation de jquery.animer pour déplacer ce menu hors de l'écran. J'appelle la fonction fitmap comme un processus étape (ou juste une fois à la fin) et il ne redessinera pas la carte.

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

J'ai lu et lu à ce sujet et il semble qu'il y ait une bizarrerie de Google Maps API v3.0 que le redessinage ne se produira pas si rien ne change réellement. Dans ce cas, ma fenêtre disponible change du menu largeur de l'écran au plein écran réel. Mais aucun redessin ne se produit.

J'ai essayé google.cartographie.événement.déclencheur(carte, 'redimensionner'); et cela ne fonctionne pas non plus.

Existe-t-il un moyen de forcer absolument Google Maps à redessiner?

26
demandé sur Kara 2013-08-25 09:38:51

1 réponses

google.maps.event.trigger(MapInstance,'resize') fonctionne très bien pour moi, le mettre au début de la fonction fitMap .

Ce qui vous manque:

Actuellement(pas dans le code affiché ci-dessus, dans votre live-code), vous appelez resizeWindow sur chaque step .

Lors de l'appel de cette fonction sur step la fonction sera appelée avant l'animation de l'étape en cours est terminé. Le résultat est que resizeWindow ne sera pas appelé lorsque l'animation complète sera terminée, il y aura par exemple une marge sur la droite côté de la carte.

Solution: appelez resizeWindow également sur le complete-callback du animation.

59
répondu Dr.Molle 2013-10-08 14:48:03