2012-01-09 13 views
121

Tengo un Google Maps (V3) en mi página al 100% de ancho de página con un marcador en el medio. Cuando cambio el tamaño del ancho de la ventana de mi navegador, me gustaría que el mapa permanezca centrado (receptivo). Ahora el mapa simplemente se queda en el lado izquierdo de la página y se hace más pequeño.Centro Google Maps (V3) en el tamaño del navegador (sensible)

ACTUALIZACIÓN Lo tengo que trabajar exactamente como se describe gracias a duncan. Este es el código final:

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

buen trabajo! sí, tiene que generar continuamente el valor del centro actual en el alcance global para que pueda ser recogido por el oyente dom – efwjames

+0

Si va hacia arriba, hágalo de esta manera, luego 'center' no necesita ser global. Proporcionar 'center' (y' calculateCenter') están en el mismo alcance que 'map', entonces todo debería funcionar. Por supuesto, si 'map' es global, entonces tendrás que arreglarlo :) –

+0

Quizás sea obvio para la mayoría, pero este código viene DESPUÉS de que el mapa esté cargado, por lo que debe estar al menos en windows.onload –

Respuesta

142

Necesita tener un detector de eventos para cuando la ventana cambie de tamaño. Esto funcionó para mí (lo puso en su función de inicialización):

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

Esto funciona perfecto, gracias! Pero si alguien ha movido el mapa, ¿cómo obtengo el nuevo centro del mapa? Encontré la función getCenter(), pero no puedo hacer que funcione correctamente. map.setCenter (map.getCenter()); no funciona –

+0

Quiere otro detector de eventos, creo que para "center_changed" en el objeto de mapa, que actualiza una variable global con las nuevas coordenadas, que luego puede usar en su setCenter. – duncan

+1

Lo intenté también: 'var center; google.maps.event.addListener (map, 'center_changed', function() { center = map.getCenter(); }); google.maps.event.addDomListener (window, 'resize', function() { map.setCenter (center); }); ' No funciona. Cualquier ayuda sería apreciada. –

83

Detectar el navegador redimensionar caso, cambia el tamaño del mapa de Google preservando al mismo tiempo el punto central:

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

Usted puede utilizar el mismo código en otros manejadores de eventos al cambiar el tamaño del mapa de google por otros medios (por ejemplo, con un control jQuery-UI 'resizable').

Fuente: http://hsmoore.com/blog/keep-google-map-v3-centered-when-browser-is-resized/ crédito a @smftre para el enlace.

Nota: Este código fue enlazado en el comentario de @ smftre sobre la respuesta aceptada. Creo que vale la pena agregarlo como su propia respuesta, ya que es realmente superior a la respuesta aceptada. Elimina la necesidad de una variable global para rastrear el punto central y un manejador de eventos para actualizar esa variable.

+0

De acuerdo con @William, este método da como resultado una posición central más precisa cuando se cambia el tamaño del mapa. – tenthfloor

+0

la respuesta aceptada no funcionaba correctamente, esta hizo el truco – Tom

+0

Esta es la mejor solución que funciona. Funciona en cada evento de Windows de cambio de tamaño. Otras soluciones no funcionaron correctamente. –

0

html: Crear un div con un id de su elección

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

JS: Crear un mapa y adjuntarlo a la div que acaba de crear

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

Centro cuando la ventana cambia de tamaño

var center = map.getCenter(); 

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

Actualización de la solución anterior a es6.

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

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

Está utilizando 'addDomListener' para la ventana' ', que es un elemento DOM, y el' map', que no lo es. El objeto de mapa debe usar 'google.maps.event.addListener' o su propio manejador de eventos' map.addListener'. – duncan

Cuestiones relacionadas