2011-08-10 7 views

Respuesta

4

me encontré con este mismo problema hoy en día, con alguna costumbre de Div flotando sobre el mapa que necesita ser re-posicionada en Movimiento mapa. Mi reposicionamiento funcionó bien siempre y cuando el usuario llegó a una parada completa después de arrastrar antes de dejar el camino del ratón (por lo que no habría ningún momento), pero si se acaba de arrastrar de forma rápida y libera los divs terminarían un poco apagado.

Para solucionar esto, me he enganchado en el evento de arrastre y el evento de reposo:

var map = /* All the map config */ 
var stickyCenter = map.getCenter(); 
/* ... Code ... */ 
google.maps.event.addListener(map, 'drag', function(){ stickyCenter = map.getCenter(); }); 
google.maps.event.addListener(map, 'idle', function() { map.setCenter(stickyCenter); }); 

Lo que pasa es que después de que ha arrastrado por el mapa y ha llegado a una parada (después de que el impulso se hace) el mapa 'vuelve' a su lugar.

Si el chasquido es demasiado repentino, probablemente se podría desplazar o animar el movimiento de alguna manera. Espero que ayude, no es perfecto, pero es una manera de revertir el impulso de un evento de resistencia.

+1

A partir de v3, puede enganchar en el evento 'center_changed' que tendrá en cuenta el tiempo entre los eventos' dragend' y 'inactivo'. https://developers.google.com/maps/documentation/javascript/events –

+0

@DevinMcInnis Tienes razón. Esto también se discutió sobre el tema abierto en el código de Google aquí: https://code.google.com/p/gmaps-api-issues/issues/detail?id=3543&q=idle&colspec=ID%20Type%20Status%20Introduced% 20Fixed% 20Summary% 20Stars% 20ApiType% 20Internal Específicamente: "Este caso de uso puede ser resuelto mediante la adición de un oyente' 'idle' una vez al dragend' evento se dispara se desencadena el evento de inactividad una vez que el mapa se para.. Para colocar la superposición, use 'bounds_changed' o' center_changed' en lugar de 'drag'" – EdgeCaseBerg

0

Estoy bastante seguro de que es posible al menos contrarrestar el impulso. ¡Alguien por favor corrígeme si estoy equivocado! En aras de la simplicidad, por ejemplo, supongamos que el contenedor del mapa tiene un width de 100vw y un height de 100vh. Simplemente llame al getCenter() en una función llamada por un evento mouseup y luego use esas coordenadas para llamar inmediatamente al setCenter()?

function initMap(){ 

    ... 

    var win = window; 
    google.maps.event.addDomListener(win, 'mouseup', setCoords); 
    function setCoords(){ 
     var x = myMap.getCenter(); 
     var lat = x.lat(); 
     var lng = x.lng(); 
     myMap.addListener('center_changed', function(lat, lng){ 
     myMap.setCenter(new google.maps.LatLng(lat, lng)); 
    }; 
}; 

El código anterior funciona realmente, pero el truco es que sólo funciona una vez hasta que se convierte en el navegador aparentemente sobrecargado y produce el error no detectada RangeError: El tamaño máximo de pila de llamadas superó.

No estoy seguro de qué hacer ahora.

Más información sobre este here.

+0

El oyente center_changed establece el centro del mapa, que activa un evento center_changed, creando un ciclo infinito. – geocodezip

+0

@geocodezip Gracias por responder. tienes razón. Me di cuenta de eso hace un momento. Lo curioso es que esperarías que funcionara perfectamente sin agregar 'myMap.addListener ...' pero no funciona. Funciona como si el código no existiera en absoluto. Por favor, echa un vistazo a mi otro hilo. http://stackoverflow.com/questions/39626454/functions-uncaught-rangeerror-maximum-call-stack-size-exceeded-with-google-m –

5

Utilice la opción indocumentado disablePanMomentumej .:

new google.maps.Map(document.getElementById(id), { 
    disablePanMomentum: true, 
    backgroundColor: 'none', 
    disableDefaultUI: true, 
    center: { 
     lat: 40.674, 
     lng: -73.945 
    }, 
    zoom: 2, 
    ... 
+0

Agradable. Estoy Curioso acerca de cómo lo encontraste. –

+1

@PedroAdameVergara Amplia ingeniería inversa o algunas habilidades básicas de expresiones regulares. Haz tu elección. – Orwellophile

+0

@Orwellophile podría explicar cómo ¿Usarías expresiones regulares para descubrir esto? Me encantaría saber, aplausos –