Comment redimensionner une carte Google avec JavaScript après son chargement?
105
J'ai un div 'mapwrap' réglé à 400px x 400px et à l'intérieur j'ai une 'map' Google réglée à 100% x 100%. La carte se charge donc à 400 x 400px, puis avec JavaScript, je redimensionne le `` mapwrap '' à 100% x 100% de l'écran - la carte google se redimensionne sur tout l'écran comme je m'y attendais mais les tuiles commencent à disparaître avant le bord droit de la page.
Existe-t-il une fonction simple que je peux appeler pour que la carte Google se réajuste à la div 'mapwrap' de plus grande taille?
Cette réponse est là depuis longtemps, donc une petite démo pourrait valoir la peine et bien qu'elle utilise jQuery, il n'y a pas vraiment besoin de le faire.
$(function(){var mapOptions ={
zoom:8,
center:new google.maps.LatLng(-34.397,150.644)};var map =new google.maps.Map($("#map-canvas")[0], mapOptions);// listen for the window resize event & trigger Google Maps to update too
$(window).resize(function(){// (the 'map' here is the result of the created 'var map = ...' above)
google.maps.event.trigger(map,"resize");});});
html,
body {height:100%;}#map-canvas {min-width:200px;width:50%;min-height:200px;height:80%;border:1px solid blue;}
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><scriptsrc="https://maps.googleapis.com/maps/api/js?v=3.exp&dummy=.js"></script>
Google Maps resize demo
<divid="map-canvas"></div>
Avec une nouvelle version du moteur de rendu dans la version 3.32 de l'API JavaScript Maps, l'événement de redimensionnement ne fait plus partie de la Mapclasse.
La documentation déclare
Lorsque la carte est redimensionnée, le centre de la carte est fixe
Le contrôle plein écran préserve désormais le centre.
Il n'est plus nécessaire de déclencher l'événement de redimensionnement manuellement.
La carte ne se redimensionnerait pas après avoir appelé cela, tant que je ne l'ai pas enveloppée avec un setTimeout. J'ai trouvé cette solution ici (voir le commentaire # 46).
Tyler Collier
Cette réponse doit être choisie étant donné que la v2 est désormais obsolète. @Tyler Collier ce déclencheur d'événement est de notifier la carte qu'elle doit se repeindre. Il est possible que vous redimensionniez un conteneur masqué, auquel cas, oui, un zoom arrière et avant fonctionnerait dans un délai d'attente.
Schien
8
La réponse populaire google.maps.event.trigger(map, "resize");n'a pas fonctionné pour moi seule.
Voici une astuce qui assurait que la page était chargée et que la carte était également chargée. En définissant un écouteur et en écoutant l'état d'inactivité de la carte, vous pouvez ensuite appeler le déclencheur d'événement pour le redimensionner.
Il semble que ce soit pour les cartes v2. L'affiche originale posait des questions sur les cartes v3. Les deux API ne semblent pas compatibles.
JoshuaD
Ce lien déclenche une menace détectée.
intotecho
1
Il vaut mieux faire le travail accompli. Il redimensionnera votre carte. Plus besoin d'inspecter l'élément pour redimensionner votre carte. Ce qu'il fait, il déclenchera automatiquement un événement de redimensionnement.
Tout d'abord, merci de m'avoir guidé et de clôturer ce numéro. J'ai trouvé un moyen de résoudre ce problème à partir de vos discussions. Ouais, venons au fait. Le fait est que j'utilise l'aide de GoogleMapHelper v3 dans CakePHP3. Lorsque j'ai essayé d'ouvrir la fenêtre contextuelle modale bootstrap, j'ai été frappé par le problème de la boîte grise sur la carte. Il a été prolongé de 2 jours. Enfin, j'ai eu une solution à ce problème.
Nous devons mettre à jour GoogleMapHelper pour résoudre le problème
Besoin d'ajouter le script ci-dessous dans la fonction setCenterMap
google.maps.event.trigger({$id}, \"resize\");
Et besoin du code d'inclusion ci-dessous en JavaScript
La réponse populaire
google.maps.event.trigger(map, "resize");
n'a pas fonctionné pour moi seule.Voici une astuce qui assurait que la page était chargée et que la carte était également chargée. En définissant un écouteur et en écoutant l'état d'inactivité de la carte, vous pouvez ensuite appeler le déclencheur d'événement pour le redimensionner.
C'était ma réponse qui a fonctionné pour moi.
la source
La carte-dans-une-boîte de Wolfgang Pichler propose de
la source
Il vaut mieux faire le travail accompli. Il redimensionnera votre carte. Plus besoin d'inspecter l'élément pour redimensionner votre carte. Ce qu'il fait, il déclenchera automatiquement un événement de redimensionnement.
la source
Tout d'abord, merci de m'avoir guidé et de clôturer ce numéro. J'ai trouvé un moyen de résoudre ce problème à partir de vos discussions. Ouais, venons au fait. Le fait est que j'utilise l'aide de GoogleMapHelper v3 dans CakePHP3. Lorsque j'ai essayé d'ouvrir la fenêtre contextuelle modale bootstrap, j'ai été frappé par le problème de la boîte grise sur la carte. Il a été prolongé de 2 jours. Enfin, j'ai eu une solution à ce problème.
Nous devons mettre à jour GoogleMapHelper pour résoudre le problème
Besoin d'ajouter le script ci-dessous dans la fonction setCenterMap
Et besoin du code d'inclusion ci-dessous en JavaScript
la source