Sto lavorando per ottimizzare un sito per dispositivi mobili. Abbiamo una pagina Posizione che include informazioni su una posizione e una mappa della posizione tramite l'API di Google Maps. (v2 - So che è deprecato ma non ho giustificato il tempo di aggiornamento, "se non è rotto ..") Voglio usare un layout a colonna singola con le informazioni di base seguito dalla mappa seguito da ulteriori informazioni.Incorpora Google Maps sulla pagina senza escludere il comportamento di scorrimento di iPhone
Ora quando uso il dito per scorrere la pagina mobile su un iPhone, una volta arrivato alla mappa, lo scorrimento della pagina viene annullato e la mappa inizia a eseguire il panning. L'unico modo per farmi scorrere più in basso nella pagina è mettere il mio dito sopra o sotto la mappa, assumendo che questo spazio sia disponibile. Se disattivo il trascinamento della mappa, quando inizio a scorrere verso il basso e ad arrivare alla mappa non viene spostato, ma la pagina non scorre neanche. Mi piacerebbe considerare la mappa come un'immagine statica che posso scorrere oltre, ma consentire comunque i pulsanti di zoom e consentire di ridisegnare la mappa con le direzioni attraverso un campo selezionato che ho codificato, quindi una literal static image non è una soluzione.
Ho trovato this post that required similar functionality, ma sta utilizzando v3. Penso che tutto ciò che devo fare sia "aggiungere eventi di tocco al contenitore della mappa", ma non ho familiarità con quella parte di javascript e ciò che ho di seguito non consente lo scorrimento normale. Devo mordere il proiettile su v3, o ho un bug sull'aggiunta di eventi di tocco che ha una semplice correzione javascript per fare ciò che voglio?
function initialize() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map_canvas"));
geocoder = new GClientGeocoder();
}
}
function showAddress(address, zoom) {
//clipped... this part works fine
}
//These three lines create a map that my finger pans
initialize();
showAddress("[clipped.. street, zip code]");
map.addControl(new GSmallZoomControl3D());
//This stops the map pan but still prevents normal page finger scrolling
map.disableDragging();
//If done right could this allow normal page finger scrolling??
var dragFlag = false;
map.addEventListener("touchstart", function(e){
dragFlag = true;
start = (events == "touch") ? e.touches[0].pageY : e.clientY;
},true);
map.addEventListener("touchend", function(){
dragFlag = false;
}, true);
map.addEventListener("touchmove",function(
if (!dragFlag) return;
end = (events == "touch") ? e.touches[0].pageY : e.clientY;
window.scrollBy(0,(start - end));
}, true);
ho anche provato a sostituire map.addEventListener
con document.getElementById("map_canvas").addEventListener
o document.addEventListener
senza alcun risultato.
La mappa è all'interno di un iframe ospitato presso Google e a meno che non ci sia qualcosa di Google ti permette di attivare o disattivare con JavaScript, probabilmente sei sfortunato. L'API v2 è stata deprecata, quindi se hai trovato qualcosa usando la versione 3 che funziona, perché non eseguire l'opzione? API v3 ha molte più funzionalità ed è più facile da usare, IMHO, comunque. (Non è più necessaria una chiave API per uno!) – Sparky
Ho iniziato a esaminare la v3 prima di postarla. Nessuna chiave API è carina, ma dobbiamo usare la funzione di geocoding che sembra richiedere una chiave API e sembra che la sua risposta sia più complessa rispetto alla v2, e abbiamo anche alcune altre pagine che la usano. Fondamentalmente sto cercando di evitare alcune ore di ricodifica per la v3 con una rapida soluzione v2, ma se ciò non è possibile mi arrenderò e faremo l'aggiornamento ragionevole. – joshuahedlund
Ho eseguito l'aggiornamento alla versione 3 ma non riesco a far funzionare gli eventi touch. Sto esaminando il mio javascript per gli errori, ma ho difficoltà a far sì che gli eventi touch rispondano a qualcosa. – joshuahedlund