Une option est de la taille de la carte à quelque chose de très grand, disons, 1000 x 1000 pixels ou plus. Cela va forcer le SVG superposition de rendre l'intérieur de la zone visible (ce qui semble être la contrainte avec Firefox). Je me rends compte que cela peut vis avec le design de votre site, de sorte que vous pourriez envisager d'emballage de la carte avec une div pour masquer le dépassement de capacité.
#map-wrap {
width: 500px;
height: 500px;
overflow: hidden;
}
#map {
width: 1000px; /* just big enough to show the whole thing at zoom #6 */
height: 1000px;
}
Une fois la carte affichée, vous pouvez re-taille de la carte à la taille désirée de 500 x 500 et re-centrer la carte. Cela peut être fait dans l' bounds_changed
événement:
google.maps.event.addListener(map, 'bounds_changed', function() {
$map.css({ height: '500px', width: '500px' }); // back to desired dims
google.maps.event.trigger(map, 'resize'); // trigger a 'refresh'
map.setCenter(new google.maps.LatLng(-18.2, 35.1)); // re-center map
google.maps.event.clearListeners(map, 'bounds_changed'); // don't do this again
});
Voici un exemple de travail (Testé avec Firefox et Chrome).
Quelques mises en garde:
- Le plus loin vous souhaitez autoriser les gens à faire un zoom avant, plus vous allez avoir besoin pour rendre l'initiale "temporaire" de la carte. Par exemple, si vous souhaitez autoriser pour le niveau de zoom 7, vous devrez peut-être faire la carte initiale de 2000 x 2000 pour compenser. Évidemment il y a des problèmes de performances lors du rendu d'une carte que les grandes. Que de disperser l'a souligné, il peut être sage de limiter les niveaux de zoom.
- En raison de la dernière minute de re-dimensionnement, il y aura un scintillement que la carte se réajuste. Vous pourriez envisager de masquer/afficher la carte à l'aide de jQuery, ou peut-être placer une superposition de couleur blanche sur le dessus de tout jusqu'à ce que la carte a fini de re-dimensionnement.