2012-10-24 11 views
12

Sono nuovo di JS e ho trovato la risposta a una domanda precedente, che ha sollevato una nuova domanda, che mi ha riportato di nuovo qui.Come utilizzare google.maps.event.trigger (mappa, 'ridimensiona')

Ho un Reveal Modal che contiene un'API di Google Maps. Quando si fa clic su un pulsante, viene visualizzata la Reveal Modal e viene visualizzata la mappa di Google. Il mio problema è che viene visualizzato solo un terzo della mappa. Questo perché è necessario implementare un trigger di ridimensionamento. La mia domanda è: come posso implementare google.maps.event.trigger (map, 'resize')? Dove metto questo piccolo frammento di codice?

Ecco il mio sito di test. Fai clic sul pulsante Mappa di Google per visualizzare il problema. http://simplicitdesignanddevelopment.com/Fannie%20E%20Zurb/foundation/contact_us.html#

Lo script Reveal modello:

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

mio 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> 

Il div che detiene 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

Si tratta di qualcosa di strano che non ho mai visto prima. Ho aperto il tuo sito e come hai detto la mappa non è mostrata completamente. Tuttavia se apro la console di Chrome usando F12 o firebug in mozilla, immediatamente la tua mappa viene mostrata completamente e fino a quando non aggiorno la pagina ottengo la mappa completa. – Cdeez

+0

Non ho una soluzione alla tua domanda, ma ho trovato questo interessante. +1. – Cdeez

+0

Grazie per il +1.Ho provato ad aggiungere un evento js, ​​comprare non ha ottenuto nulla per funzionare. Qualcuno là fuori deve sapere cosa sta succedendo. –

risposta

20

c'erano in realtà un paio di problemi con il codice sorgente.

  • viene creata la funzione initialize(), ma mai chiamato
  • Il $(document).ready dovrebbe essere chiamato dopo che jQuery ci caricato
  • Il map dovrebbe essere una variabile globale (come @Cristiano Fontes ha detto) e non un var map
  • (Importante) L'evento click non viene mai chiamato. Stai cercando di combinare i due metodi Reveal from Zurb per aprire una finestra di dialogo (una con JS, una con solo HTML). È necessario utilizzare l'unico metodo JS.
  • Si sta utilizzando l'ID errato (#myModal1 non si trova mai nel codice HTML).

E ora: Download the solution (Si prega di fornire un download/JSFilf successivo, quindi non è necessario crearlo da soli).

Spero che abbia aiutato!

+2

Grazie mille per il vostro tempo e un esempio di lavoro molto dettagliato @MarcoK. Hai colpito tutto sulla testa e il mio problema è stato risolto. Mi ricorderò di fornire un jsfiddle la prossima volta che sarò qui. Grazie ancora!! –

+4

Hm, la soluzione è finita ora ... sarebbe stato bello averlo anche su JSFiddle ... – bfncs

+0

plus1 "la mappa dovrebbe essere una variabile globale", shanks man. – tenderloin

11

Basta aggiungere qui

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

, ma è necessario mettere la mappa come una variabile globale, in modo da perdere la var qui

<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

Grazie per la tua risposta, anche se non ho potuto farlo funzionare. Ho cambiato il mio codice come hai detto tu. Sto ancora ricevendo un terzo della mappa. –

+1

Ancora non l'ho capito. Grrrrrrrrrrr –

+0

Vedo che c'è un errore con il tuo Jquery, guarda 'Uncaught ReferenceError: $ non è definito' e inoltre c'è un ';' mancante 'after (map, 'ridimensiona')' –

3

Non trovato come lasciare un commento per l'ultima risposta, ma +1 per l'aiuto di Cristiano Fontes! Ha funzionato. Nel mio caso:

<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'); 
       }); 
});