2 votes

Jquery mobile + google maps / mauvaise hauteur

Malheureusement, avec le code suivant, cela ne fonctionne pas - seule une partie de la carte est visible, dans l'en-tête. Peut-être que quelqu'un peut m'aider?

<!DOCTYPE html>
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Map 2.0</title>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
    <link type="text/css" href="css/style.css" rel="stylesheet" media="all" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
    <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
    <script type="text/javascript" src="js/map.js"></script>
</head>
<body>
    <div data-role="page" id="map_page">

        <div data-role="header">
            <h1>
                Map
            </h1>
        </div>

        <div data-role="content" id="map_canvas">
        </div>

    </div>
    </body>
</html>

js:

$("#map_page").on("pageshow", function() {

    var myOptions = {
    center: new google.maps.LatLng(-34.397, 150.644),
    zoom: 8,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
})

css:

 html { height: 100% }
 body { height: 100%; margin: 0px; padding: 0px }
 #map_canvas { height: 100% }

Salutations

@Omar: J'ai essayé de modifier le code avec vos suggestions, mais cela ne fonctionne toujours pas. Ai-je peut-être manqué quelque chose?

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Map 2.0</title>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
    <link type="text/css" href="css/style.css" rel="stylesheet" media="all" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
    <script type="text/javascript" src="js/map.js"></script>
</head>
<body>
    <div data-role="page" id="map_page">

        <div data-role="header">
            <h1>
                Map
            </h1>
        </div>

        <div data-role="content">
            <div id="map_canvas"></div>
        </div>

    </div>
</body>
</html>

js:

$("#map_page").on("pageshow", function() {

    var myOptions = {
    center: new google.maps.LatLng(-34.397, 150.644),
    zoom: 8,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
})

css:

html { height: 100% }
body { height: 100%; margin: 0px; padding: 0px }
#map_canvas { height: 100% }

Salutations de l'Allemagne & du Maroc

6voto

Gajotres Points 46468

Voici un exemple de travail: http://jsfiddle.net/Gajotres/7kGdE/

La page de la carte doit être initialisée pendant l'événement pageshow car c'est à ce moment-là seulement que la hauteur correcte peut être calculée.

Aussi l'utilisation de cette fonction est nécessaire :

function getRealContentHeight() {
    var header = $.mobile.activePage.find("div[data-role='header']:visible");
    var footer = $.mobile.activePage.find("div[data-role='footer']:visible");
    var content = $.mobile.activePage.find("div[data-role='content']:visible:visible");
    var viewport_height = $(window).height();

    var content_height = viewport_height - header.outerHeight() - footer.outerHeight();
    if((content.outerHeight() - header.outerHeight() - footer.outerHeight()) <= viewport_height) {
        content_height -= (content.outerHeight() - content.height());
    } 
    return content_height;
}

Il est utilisé pour définir une hauteur de contenu correcte en fonction de la hauteur disponible, de la hauteur de l'en-tête et du pied de page. Si vous consultez cet ARTICLE, vous trouverez beaucoup plus d'informations avec quelques exemples.

0voto

Jonny Points 711

J'ai rencontré un problème similaire : Une page avec en-tête et pied de page, tandis que la carte Google au milieu était plus grande et donc une partie se retrouvait derrière le pied de page. Cela arrive uniquement au lancement de l'application la toute première fois ou après avoir vidé le cache et rechargé la page avec la carte Google.

J'ai aussi été piégé en plaçant la carte Google dans la zone .ready. À ce moment-là, la hauteur de l'en-tête et/ou du pied de page de la page peut être de 0 et donc l'espace pour afficher la carte Google est calculé trop grand et est partiellement caché derrière le pied de page. Cela peut être vérifié en définissant la hauteur minimale de la page (faite par JQuery Mobile). JQuery Mobile se charge du redimensionnement et redimensionnerait correctement la page avec la carte Google lors du redimensionnement des navigateurs sur les PC ou sur les appareils mobiles (en tournant de 90 degrés). Par conséquent, définir une hauteur fixe peut entraîner un redimensionnement incorrect plus tard. Je suggère de définir initialement la largeur minimale dans la zone .ready comme ceci :

// Le délai garantit que la hauteur de l'en-tête/du pied de page est définie
setTimeout(function() {
    $('#yourPageId').css('min-height', ($(window).height() - $('#yourHeaderId').height() - $('#yourFooterId').height() +1) + 'px');
}, 200);

Vous pouvez éviter le délai en plaçant le code dans l'événement "pageshow" (avec la hauteur correcte de l'en-tête et du pied de page) mais il se déclenche à chaque ouverture de la page (par exemple dans les projets multipages) tandis que JQuery Mobile a son propre code pour réinitialiser la hauteur (correctement).

Testé également sur les appareils mobiles (Chrome, Firefox, Safari)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X