2012-01-09 12 views
121

Ho un Google Maps (V3) nella mia pagina con una larghezza del 100% della pagina con un indicatore nel mezzo. Quando ridimensiono la larghezza della finestra del mio browser, vorrei che la mappa rimanesse centrata (reattiva). Ora la mappa rimane sul lato sinistro della pagina e diventa più piccola.Centro Google Maps (V3) sul ridimensionamento del browser (reattivo)

UPDATE È riuscito a funzionare esattamente come descritto grazie a duncan. Questo è il codice finale:

var center; 
function calculateCenter() { 
    center = map.getCenter(); 
} 
google.maps.event.addDomListener(map, 'idle', function() { 
    calculateCenter(); 
}); 
google.maps.event.addDomListener(window, 'resize', function() { 
    map.setCenter(center); 
}); 
+1

buon lavoro! Sì, è necessario emettere continuamente il valore centrale corrente su un ambito globale in modo che possa essere rilevato dall'ascoltatore dom – efwjames

+0

Se si sta andando in alto, procedere in questo modo, quindi 'center' non ha bisogno di essere globale. Fornire 'center' (e' calculateCenter') sono nello stesso scope di 'map', quindi tutto dovrebbe funzionare. Ovviamente, se 'map' è globale, dovrai aggiustarlo anche tu :) –

+0

Forse è ovvio per la maggior parte, ma questo codice viene DOPO che la mappa è stata caricata, quindi dovrebbe essere almeno su windows.onload –

risposta

142

È necessario avere un listener di eventi per quando la finestra ridimensiona. Questo ha funzionato per me (metterlo nella funzione di inizializzazione):

google.maps.event.addDomListener(window, 'resize', function() { 
    map.setCenter(center); 
}); 
+0

Questo funziona perfettamente, grazie! Ma se qualcuno ha spostato la mappa, come ottengo il nuovo centro della mappa? Ho trovato la funzione getCenter(), ma non riesco a farlo funzionare correttamente. map.setCenter (map.getCenter()); non funziona –

+0

Vuoi un altro listener di eventi, penso per "center_changed" sull'oggetto mappa, che aggiorna una variabile globale con le nuove coordinate, che puoi quindi utilizzare in setCenter. – duncan

+1

Ho provato anche quello: 'var center; google.maps.event.addListener (mappa, 'center_changed', function() { center = map.getCenter(); }); google.maps.event.addDomListener (finestra, 'resize', function() { map.setCenter (center); }); ' Non funziona. Qualsiasi aiuto sarebbe apprezzato. –

83

Rilevare il browser ridimensionare evento, ridimensiona la Google Map preservando il punto centrale:

var map = ...; // your map initialisation code 

google.maps.event.addDomListener(window, "resize", function() { 
    var center = map.getCenter(); 
    google.maps.event.trigger(map, "resize"); 
    map.setCenter(center); 
}); 

È possibile utilizzare lo stesso codice in altri gestori di eventi durante il ridimensionamento della mappa di google tramite altri mezzi (ad esempio con un controllo 'ridimensionabile' di jQuery-UI).

Fonte: http://hsmoore.com/blog/keep-google-map-v3-centered-when-browser-is-resized/ credito a @smftre per il collegamento.

Nota: questo codice è stato collegato nel commento di @ smftre sulla risposta accettata. Penso che valga la pena di aggiungerlo come propria risposta dato che è davvero superiore alla risposta accettata. Elimina la necessità di una variabile globale per tracciare il punto centrale e un gestore di eventi per aggiornare quella variabile.

+0

Accetto con @William, questo metodo si traduce in una posizione centrale più accurata quando la mappa viene ridimensionata. – tenthfloor

+0

risposta accettata non funzionava correttamente, questo ha fatto il trucco – Tom

+0

Questa è la soluzione migliore e funzionante. Funziona su ogni evento di ridimensionamento di Windows. Altre soluzioni non funzionavano correttamente. –

0

html: Creare un div con un id di vostra scelta

<div id="map"></div> 

js: Creare una mappa e attaccarlo al div appena creato

var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 16, 
    center: new google.maps.LatLng(-33.890542, 151.274856) 
}); 

Centro quando ridimensiona la finestra

var center = map.getCenter(); 

google.maps.event.addDomListener(window, 'resize', function() { 
    map.setCenter(center); 
}); 
0

Aggiornamento della soluzione di cui sopra a es6.

let center; 
const addMapListener = google.maps.event.addDomListener; 

addMapListener(map, 'idle',() => center = map.getCenter()); 
addMapListener(window, 'resize',() => map.setCenter(center)); 
+0

Stai utilizzando 'addDomListener' per entrambi la finestra' ', che è un elemento DOM, e' map', che non lo è. L'oggetto della mappa dovrebbe usare 'google.maps.event.addListener' o il proprio gestore di eventi' map.addListener'. – duncan

Problemi correlati