2012-10-24 4 views
12

Je suis nouveau à JS, et j'ai trouvé la réponse à une question précédente, qui a soulevé une nouvelle question, qui m'a amené ici encore. J'ai un Reveal Modal qui contient une API Google Map. Quand un bouton est cliqué, le mode Reveal apparaît et affiche la carte Google. Mon problème est que seulement un tiers de la carte affiche. C'est parce qu'un déclencheur de redimensionnement doit être implémenté. Ma question est de savoir comment implémenter google.maps.event.trigger (map, 'resize')? Où puis-je placer ce petit extrait de code?Comment utiliser google.maps.event.trigger (map, 'redimensionner')

Voici mon site de test. Cliquez sur le bouton Google Map pour voir le problème. http://simplicitdesignanddevelopment.com/Fannie%20E%20Zurb/foundation/contact_us.html#

Le script du modèle Reveal:

<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#myModal1').click(function() { 
    $('#myModal').reveal(); 
     }); 
      }); 
</script> 

Mon Google Map Script:

<script type="text/javascript"> 
function initialize() { 
var mapOptions = { 
center: new google.maps.LatLng(39.739318, -89.266507), 
zoom: 5, 
mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
var map = new google.maps.Map(document.getElementById("map_canvas"), 
mapOptions); 
} 

</script> 

Le div qui détient la Google Map:

<div id="myModal" class="reveal-modal large"> 
    <h2>How to get here</h2> 
    <div id="map_canvas" style="width:600px; height:300px;"></div> 
    <a class="close-reveal-modal">&#215;</a> 
</div> 
+1

C'est quelque chose de bizarre, je ne l'ai pas vu. J'ai ouvert votre site et comme vous l'avez dit la carte n'est pas montrée complètement. Cependant, si j'ouvre la console en chrome en utilisant F12 ou le firebug dans mozilla, immédiatement votre carte est affichée complètement et jusqu'à ce que je rafraichisse la page j'obtiens la carte complète. – Cdeez

+0

Je n'ai pas de solution à votre question, mais j'ai trouvé cela intéressant. +1 – Cdeez

+0

Merci pour le +1.J'ai essayé d'ajouter un événement js, acheter n'ont rien obtenu au travail. Quelqu'un là-bas doit savoir ce qui se passe. –

Répondre

20

Il y avait en fait deux problèmes avec votre code source.

  • La fonction initialize() est créée, mais jamais appelé
  • Le $(document).ready doit être appelée après nous jQuery chargé
  • Le map doit être une variable globale (comme @Cristiano dit Fontes) et non un var map
  • (Important) L'événement click n'est jamais appelé. Vous essayez de combiner les deux méthodes Reveal from Zurb permet d'ouvrir une boîte de dialogue (une avec JS, une avec seulement HTML). Vous devez utiliser la seule méthode JS.
  • Vous utilisez le mauvais ID (#myModal1 ne se trouve jamais dans le code HTML).

Et maintenant: Download the solution (S'il vous plaît nous fournir un téléchargement/JSFiddle la prochaine fois, nous n'avons donc pas besoin de créer nous-mêmes).

Espérons que cela a aidé!

+2

Merci beaucoup pour votre temps et votre exemple de travail très détaillé @MarcoK. Vous frappez tout sur la tête et mon problème est maintenant résolu. Je me souviendrai de fournir un jsfiddle la prochaine fois que je serai ici. Merci encore!! –

+4

Hm, la solution a disparu maintenant ... aurait été génial d'avoir cela sur JSFiddle ainsi ... – bfncs

+0

plus1 "carte devrait être une variable globale", shanks man. – tenderloin

11

il suffit d'ajouter ici

<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#myModal1').click(function() { 
    $('#myModal').reveal(); 
    google.maps.event.trigger(map, 'resize'); 
     }); 
      }); 
</script> 

mais vous avez besoin de mettre la carte en tant que variable globale, donc perdre le var ici

<script type="text/javascript"> 
    function initialize() { 
    var mapOptions = { 
     center: new google.maps.LatLng(39.739318, -89.266507), 
     zoom: 5, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
--> map = new google.maps.Map(document.getElementById("map_canvas"), 
    mapOptions); 
} 

</script> 
+0

Merci pour votre réponse, je ne pouvais pas le faire fonctionner. J'ai changé mon code comme tu l'as dit. Je suis toujours en train d'obtenir un tiers de la carte. –

+1

Je n'ai toujours pas compris cela. Grrrrrrrrr –

+0

Je vois qu'il y a une erreur avec votre Jquery, regardez 'Uncaught ReferenceError: $ n'est pas défini' et aussi il y a un ';' missing 'after (map, 'resize')' –

3

N'a pas trouvé comment laisser un commentaire sur la dernière réponse, mais +1 pour l'aide de Cristiano Fontes! Ça a marché. Dans mon cas:

<script type="text/javascript">  

$('div.map-box').hide(); 
$('li.map').mouseover(function(){ 
    $('div.map-box').show(); 
    google.maps.event.trigger(map, 'resize'); 
}); 

</script> 
5
google.maps.event.addListenerOnce(map, 'tilesloaded', function() { 
       google.maps.event.addListenerOnce(map, 'tilesloaded', function() { 
        google.maps.event.trigger(map, 'resize'); 
       }); 
}); 
Questions connexes