Comment forcer le rafraîchissement avec l’API Google Maps v3.0?

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

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

et la fonction à redimensionner 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 réellement la fenêtre. Mais…

J’ai un menu en bas à droite de la fenêtre. J’utilise jquery.animate pour déplacer ce menu en dehors de l’écran. J’appelle la fonction fitmap en tant que processus pas à pas (ou juste une fois à la fin) et elle 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 que Google Maps API v3.0 ait une bizarrerie qu’il ne soit pas possible de redessiner si rien ne change réellement. Dans ce cas, ma fenêtre disponible change de la largeur de l’écran – menu à l’écran complet. Mais aucune redessine ne se produit.

J’ai essayé google.maps.event.sortinggger (map, ‘redimensionner’); et ça ne marche pas non plus.

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

google.maps.event.sortinggger(MapInstance,'resize') fonctionne bien pour moi, mettez-le au début de la fonction fitMap .

Ce qui vous manque

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

Lorsque vous appelez cette fonction à l’ step la fonction sera appelée avant la fin de l’animation pour l’étape en cours. Le résultat est que resizeWindow ne sera pas appelé une fois l’animation complète terminée. Il y aura par exemple une marge sur le côté droit de la carte.

Solution: appelez resizeWindow également sur le rappel complete de l’ animation .