PhoneGap + JQuery Mobile + Google Maps v3: Karte zeigt Links Oben Fliesen?
Ich habe eine PhoneGap-Anwendung, die verwendet JQuery mobile, um zwischen den Seiten zu navigieren.
Wenn ich navigieren Sie von der Hauptseite aus zu einer Seite mit einer Google map, die Karte zeigt nur eine einzelne Kachel in einer Zeit, in der oberen linken Ecke, wie dies:
Was kann der Grund dafür sein ?
**
Source Code:
Das folgende script wird in den head meiner Seite
<script>
$(document).on("pageinit", "#stores", function () {
var centerLocation = new google.maps.LatLng('57.77828', '14.17200');
var myOptions = {
center: centerLocation,
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP,
callback: function () { alert('callback'); }
};
map_element = document.getElementById("map_canvas");
map = new google.maps.Map(map_element, myOptions);
var mapwidth = $(window).width();
var mapheight = $(window).height();
$("#map_canvas").height(mapheight);
$("#map_canvas").width(mapwidth);
google.maps.event.trigger(map, 'resize');
});
</script>
Meine Seite ist wie folgt
<!-- Home -->
<div data-role="page" id="home">
.
.
.
</div>
<div data-role="page" id="stores">
<div data-role="content" id="map_canvas"></div>
</div>
Navigiere ich von zu Hause aus, um die Seite Karten wie diese:
<a href="#stores">Stores</a>
Update
nach der Anwendung Gajotres Lösung die Fliesen werden wie diese
- Zeigen Sie uns Ihre javascript-und HTML-code.
- stackoverflow.com/questions/13823556/...
- Ich habe den code Hinzugefügt, überprüfen Sie bitte die geänderte Frage
- Ich erlebte ähnliche Probleme wie ich. Ich fand, dass, wenn die Seite initialisiert wurde, die Karte wäre dimensioniert sein, basierend auf, was es dachte, es ist derzeit erhältlich in der Größe ist, aber wenn du später machte es sichtbar, würde es nicht automatisch in der Größe anpassen.
google.maps.event.trigger(map, "resize");
sollten etwas tun für Sie, aber Sie haben, nennen Sie es, wenn Sie die Karte sichtbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
intro
Neueren Versionen von jQuery Mobile und Google Maps v3 sind etwas ganz besonderes.
Ihre erste problem war mit pageinit event der Berechnung. Sie cant get eine korrekte Seite, Höhe und Breite. So verwenden Sie stattdessen pageshow, Sie finden es funktioniert in meinem Beispiel.
Bevor Sie zeigen die Karte, die Sie brauchen, um die Größe Ihrer content-DIV. Dies ist, weil die content-div wird die Größe gemäß den zur Verfügung stehenden inneren Elemente. Wir brauchen also, um dieses Update manuell, über javascript oder CSS. Ich habe bereits eine Antwort auf diese Frage:google-map nicht auf ganzen Bildschirm nach upgrade auf jquerymobile 1.2 aber ich kann dir auch zeigen, ein Beispiel:
Beispiel arbeiten
Arbeiten jsFiddle Beispiel: http://jsfiddle.net/Gajotres/GHZc8/ (Javascript-Lösung, die CSS-Lösung gefunden werden kann, die in einem unteren link).
Code
HTML -
Javascript
Hier ist eine Funktion zum berechnen der richtigen Seite Höhe:
Eine andere Lösung
Es gibt auch eine andere Lösung für dieses problem, nur mit CSS und kann es gefunden werden HIER. Ich bevorzuge diese Lösung, Ursache, die es nicht benötigen javascript um korrekt zu beheben, die Karte Höhe.
CSS:
Eine Letzte Sache
Auch wenn die Breite Seite ist immer noch falsch ist, wird einfach 100%:
Ich habe dieses Problem seit Monaten schlug mein Kopf gegen die Wand versuchen, eine Lösung zu finden. Auch wenn die style-Eigenschaften für die Inhalte und map-canavas divs nicht alle Probleme lösen. google.maps.event.trigger(map, "resize") habe es nicht entweder. Die Karte war voller Bildschirm, jetzt aber immer noch zentriert in der oberen linken Ecke. Und wenn Sie aufgerufen, Ihre initialisieren Funktionen auf jeder pageshow die Karte wäre wieder auf seine ursprüngliche position jeder Zeit.
War ich in der Lage zu kommen mit diesem aufgerufen, auf dem pageshow-event und alle meine Probleme gelöst!
CSS
Hier ist mein Inhalt und map-canvas div.
Wird der aktuelle Mittelpunkt der Karte wird die Karte auf den aktuellen div, legt dann die Karte zentrieren. Auf diese Weise, wenn der Benutzer navigiert Weg von der Seite und kommt wieder zurück, die Karte verliert nicht seine position.
Hoffe, das hilft.
Robert