Google Maps Affichage:Aucun Problème
Je suis en train de configurer une carte Google map qui s'affiche quand un lien est cliqué, et ensuite se cacher quand un autre lien est cliqué. Tout fonctionne bien, sauf quand je montre la carte de l'affichage:aucun, il ne s'affiche pas correctement.
J'ai lu sur l'utilisation de google.cartes.de l'événement.déclencheur(carte, 'redimensionner'); mais je ne suis pas assez habile avec Javascript et JQuery pour savoir comment l'ajouter dans.
Voici le code que j'ai utilisé:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN">
<html>
<head>
<title></title>
<style type="text/css">
#viewmap {
position:relative;
width:944px;
float:left;
display:none;
}
#hidemap {
position:relative;
width:944px;
float:left;
display:block;
}
#map_canvas {
position:relative;
float:left;
width:944px;
height:300px;
}
</style>
<script type="text/javascript"
src="http://maps.google.com/maps/api/js?v=3.2&sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(-27.999673,153.42855);
var myOptions = {
zoom: 15,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
}
};
var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
var contentString = 'blah';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var marker = new google.maps.Marker({
position: latlng,
map: map
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<script type="text/javascript">
function toggleDiv1(viewmap){
if(document.getElementById(viewmap).style.display == 'block'){
document.getElementById(viewmap).style.display = 'none';
}else{
document.getElementById(viewmap).style.display = 'block';
}
}
function toggleDiv2(hidemap){
if(document.getElementById(hidemap).style.display == 'none'){
document.getElementById(hidemap).style.display = 'block';
}else{
document.getElementById(hidemap).style.display = 'none';
}
}
</script>
</head>
<body>
<div id="viewmap">
<a href="#" onmousedown="toggleDiv1('viewmap'); toggleDiv2('hidemap');">Hide map</a>
<div id="map_canvas"></div>
</div>
<div id="hidemap">
<a href="#" onmousedown="toggleDiv1('viewmap'); toggleDiv2('hidemap');">View map</a>
</div>
</body>
</html>
Toute aide serait grandement appréciée,
Quintin
Vous devez vous connecter pour publier un commentaire.
Ce problèmes se produit également avec les onglets jquery, au lieu de demander "display:none", vous pouvez essayer de se faufiler la carte de cette façon:
Ajouter les styles suivants lorsque vous essayez de cacher la carte, au lieu d'utiliser display:none
Vous pouvez également ajouter des transitions comme: transition: à gauche 1s ease;
Vous pouvez essayer avec google écouteur d'événement de déclenchement après l'affichage de la carte:
J'ai rencontré ce même problème aujourd'hui et a finalement trouvé ce à l'officiel Google Maps Javascript API V3 de Référence:
Comme
display:none
est équivalent à quitter le<div>
avec une taille de 0, le changer pourdisplay:block
devient en fait un changement de taille, ce qui, par conséquent, nécessaire pour déclencher la carte de l'événement de redimensionnement.A fonctionné comme un charme pour moi.
Mise à JOUR 2018-05-22
Avec un nouveau moteur de rendu de presse dans la version 3.32 des Maps JavaScript API de l'événement resize n'est plus une partie de
Map
classe.La documentation états
source: https://developers.google.com/maps/documentation/javascript/new-renderer
google.maps.event.trigger(map, "resize");
n'a aucun effet à partir de la version 3.32google.maps.event.trigger($scope.map.control.getGMap(), 'resize');
<tabs nav-style="tabs" @active="tabActive">
et un écouteur d'événementtabActive(index) { this.$gmapDefaultResizeBus.$emit('resize') }
Le problème avec la taille de la carte, c'est qu'il a besoin de savoir la taille de la div qu'il est rendu. Au moment de l'initialisation d'une carte sur le document de la charge lors de votre div est masqué si la carte ne peut pas calculer correctement la taille - pour résoudre ce problème, il vous suffit de l'initialiser le temps de vous montrer la div (pas onload).
Initialiser la carte lorsque vous souhaitez afficher. J'ai eu le même problème et résolu de cette façon.
Supprimer cette ligne:
Et modifier le
toggleDiv
script de cette façon:.map_container {display:none;}
Vous, en effet, de mieux utiliser le hors-gauche technique!
Voici mes modifications:
Exemple De Lien.
Assez simple... par le temps de l'initialisation de la carte la totalité de son enveloppe extérieure divs ont d'ores et déjà être affiché.
Donc initialiser la carte à la fin: la
J'ai aussi trouvé une autre solution. Parfois, vous devez appeler
refresh()
sur google maps objet et la carte sera forcé de les redimensionner.Ce code de travail à droite (à l'aide de jQuery 1.2.6):
Css:
#gog-map{position:absolute; visibility:hidden;}
Cela a bien fonctionné pour moi - je ne sais pas si c'est parce que je me cache la toile plutôt que la div contenant....fonctionne très bien sous IE, Firefox et Chrome. Bien sûr, vous pouvez masquer votre conteneur une fois la carte de la toile est caché.
J'ai essayé d'animer mes cartes avec pas de chance et enfin est venu avec cette:
CSS:
Nous avons mis la carte wrapper avec
position:absolute;
etvisibility:hidden;
car il doit avoir ses normal dimensions à restituer correctement.JavaScript:
Généralement google.cartes.de l'événement.déclencheur(carte, 'redimensionner') sera actualiser la carte et donc ajouter le code après chaque fois qu'il est affiché, depuis l'état précédent de l'écran est "aucun":
Il y a un exemple dans la documentation: https://developers.google.com/maps/documentation/javascript/examples/control-replacement
Et si vous ne voulez pas le contrôle doit être situé dans la zone de la carte, juste en commentaire la ligne suivante: