PhoneGap + JQuery Mobile + Google Maps v3: la carte montre en Haut à Gauche du carrelage?
J'ai une application PhoneGap qui utilise JQuery mobile pour naviguer entre les pages.
Quand j'ai naviguer à partir de la page principale d'une page contenant une carte de Google maps, la carte montre une seule tuile à la fois dans le coin supérieur gauche comme ceci:
Quelle peut être la raison pour cela ?
**
Code Source:
Le script suivant est dans la tête de ma page
<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>
Ma Page, c'est comme cela
<!-- Home -->
<div data-role="page" id="home">
.
.
.
</div>
<div data-role="page" id="stores">
<div data-role="content" id="map_canvas"></div>
</div>
Je naviguer à partir de la maison à la page des cartes comme ceci:
<a href="#stores">Stores</a>
Mise à jour
après l'application de Gajotres solution les carreaux de devenir comme ça
Montrez-nous votre javascript et le code HTML.
stackoverflow.com/questions/13823556/...
J'ai ajouté le code, veuillez consulter la question modifiée
Je connaît des problèmes similaires de moi. J'ai constaté que lorsque la page a été initialisé, la carte serait dimensionné en fonction de ce qu'il croyait, il est actuellement disponible taille, mais si plus tard vous avez rendu visible, il ne serait pas redimensionner automatiquement.
stackoverflow.com/questions/13823556/...
J'ai ajouté le code, veuillez consulter la question modifiée
Je connaît des problèmes similaires de moi. J'ai constaté que lorsque la page a été initialisé, la carte serait dimensionné en fonction de ce qu'il croyait, il est actuellement disponible taille, mais si plus tard vous avez rendu visible, il ne serait pas redimensionner automatiquement.
google.maps.event.trigger(map, "resize");
doit faire quelque chose comme ça pour vous, mais vous aurez à appeler quand vous faites la carte visible.OriginalL'auteur Mina Samy | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
intro
Les nouvelles versions de jQuery Mobile et Google Maps v3 sont un peu spécial.
Votre premier problème a été en utilisant pageinit événement pour le calcul. À ce point, vous ne pouvez pas obtenir une bonne page de hauteur et de largeur. Ainsi, au lieu d'utiliser pageshow, vous trouverez de travail dans mon exemple.
Avant de vous montrer la carte vous avez besoin de redimensionner son contenu DIV. C'est parce que le contenu de la div redimensionner en fonction de la disposition des éléments internes. Nous avons donc besoin de le corriger à la main, à l'aide de javascript ou CSS. J'ai déjà une réponse sur cette question: google map et non en plein écran après la mise à niveau de jquerymobile 1.2 mais je peux aussi vous montrer un exemple de travail:
Exemple de travail
De travail jsFiddle exemple: http://jsfiddle.net/Gajotres/GHZc8/ (solution Javascript, CSS solution peut être trouvée dans un lien en bas).
Code
HTML
Javascript
Ici est une fonction utilisée pour calculer la bonne hauteur de la page:
Une autre solution
Il y a aussi une autre solution à ce problème qui n'utilise CSS et il peut être trouvé ICI. Je préfère cette solution de cause, il n'est pas besoin de javascript pour fixer correctement la carte de la hauteur.
CSS:
Une dernière chose
Aussi, si la largeur de la page est toujours incorrecte, il suffit de le régler à 100%:
Pourquoi n'essayez-vous pas ma solution à l'intérieur de votre exemple. Si ma solution est également pas de travail puis le problème est ailleurs.
ok, testé à nouveau, la carte s'affiche à la taille de la fenêtre, mais à chaque fois que je touche la carte, il affiche toujours une seule tuile comme dans l'image ci-jointe
Je crois que je comprends votre problème. Vous êtes d'ajouter à la mauvaise div. Ne pas ajouter à la data-role="content" div comme ceci: <div data-role="contenu" id="map_canvas"></div> au lieu de créer un autre div à l'intérieur de celui-ci, comme ceci: <div data-role="content"><div id="map_canvas"></div></div>. Fondamentalement, vous vous battez avec un jQuery Mobile sur un contenu de la div dimensions.
Merci beaucoup Cela a fonctionné après l'utilisation de votre code dans le redimensionnement de la carte toile en "pageshow" au lieu de "pageinit"
OriginalL'auteur Gajotres
J'ai eu ce problème pendant des mois à se taper la tête contre le mur en essayant de trouver une solution. Même en mettant les propriétés de style pour le contenu et la carte-caves divs ne résout pas tous les problèmes. google.cartes.de l'événement.déclencheur de la carte, "redimensionner") n'a pas le faire non plus. La carte était en plein écran à maintenant, mais toujours centré dans le haut à gauche. Et si vous avez appelé votre initialiser des fonctions sur chaque pageshow la carte serait remettre à sa position d'origine à chaque fois.
J'ai été en mesure de venir avec cette appelé le pageshow événement et résolu tous mes problèmes!
CSS
Voici mon contenu et de la carte-toile div.
Il devient le centre de la carte, redimensionne la carte de l'actuel div, puis définit le centre de la carte. De cette façon, si l'utilisateur quitte la page et revient, la carte ne perd pas de sa position.
Espère que cette aide.
Robert
OriginalL'auteur BGecko