Pracuję nad optymalizacją witryny pod kątem urządzeń przenośnych. Mamy stronę Lokalizacja zawierającą informacje o lokalizacji i mapę lokalizacji za pomocą interfejsu Google Maps API. (v2 - Wiem, że jest przestarzałe, ale nie usprawiedliwiłem czasu na aktualizację, "jeśli nie jest zepsuty ..") Chcę użyć układu pojedynczej kolumny z podstawowymi informacjami, po której następuje mapa, a następnie więcej informacji.Umieść Mapy Google na stronie bez przesłonięcia zachowania przewijania iPhone'a
Teraz, gdy przewijam palcem stronę mobilną na iPhonie, po przejściu do mapy przewijanie strony zostanie przesłonięte, a mapa zacznie przesuwać. Jedynym sposobem, aby przewinąć stronę w dół, jest umieszczenie palca nad lub pod mapą, zakładając, że takie miejsce jest dostępne. Jeśli wyłączę przeciąganie mapy, to gdy zacznę przewijanie w dół i dojdę do mapy, nie przesuwa się ona, ale strona też nie przewija. Chciałbym potraktować mapę jako obraz statyczny, który mogę przewijać obok, ale nadal pozwalam przyciskom zoomu i pozwolić na przerysowanie mapy ze wskazówkami przez wybrane pole, które zakodowałem, więc literal static image nie jest rozwiązaniem.
Znalazłem this post that required similar functionality, ale używa v3. Myślę, że wszystko, co muszę zrobić, to "dodać zdarzenia dotykowe do kontenera mapy", ale nie znam tej części javascriptu, a to, co mam poniżej, nie pozwala na normalne przewijanie. Czy muszę ugryźć punkt na v3, czy mam błąd w dodawaniu zdarzeń dotykowych, który ma prostą korektę javascript, aby zrobić to, co chcę?
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);
Próbowałem również zastąpienie map.addEventListener
z document.getElementById("map_canvas").addEventListener
lub document.addEventListener
bezskutecznie.
Mapa jest wewnątrz iframe hostowane na Google i chyba coś jest Google niech Ci przełączać się za pomocą JavaScriptu, prawdopodobnie masz pecha. API v2 jest przestarzałe, więc jeśli znalazłeś coś, co działa w wersji 3, to dlaczego nie dokonać zmiany? API v3 ma znacznie więcej funkcji i jest łatwiejszy w użyciu, tak czy inaczej, IMHO. (Koniec z kluczem API dla jednego!) – Sparky
Zacząłem zaglądać do v3 przed opublikowaniem tego. Żaden klucz API nie jest ładny, ale musimy użyć funkcji geokodowania, która wygląda tak, jak wymaga klucza API i wygląda na to, że jej odpowiedź jest bardziej złożona niż na v2, i mamy kilka innych stron, które również ją wykorzystują. Zasadniczo staram się uniknąć kilku godzin rekodowania dla v3 z szybką poprawką v2, ale jeśli to nie jest możliwe, poddam się i zrobię sensowną aktualizację. – joshuahedlund
Zaktualizowałem teraz do wersji 3, ale nie mogę uruchomić zdarzeń dotykowych. Zajmuję się moim javascriptem w poszukiwaniu błędów, ale mam problemy z uzyskaniem dotykowych zdarzeń, by odpowiedzieć na cokolwiek. – joshuahedlund