4

Google Map API で JQuery モバイルを使用しています。ページを更新しないと地図が正しく表示されず、原因がわかりません。

ここに私のmap.htmlファイルがあります:

<div data-role="page" id="map-page">  
    <div data-role="content" id="canvas-map" style="background-color:red"></div>
    <script src="js/map.js"></script>
    <script type="text/javascript">
        var $canvasMap = $('#canvas-map');
        $('#canvas-map').on('pagebeforeshow', initMap());
    </script>
</div>

そして私のmap.jsファイル:

function initMap() {
    "use strict";
    google.maps.visualRefresh = true;

    var marker, map, 
        myLocation = {lat:50, lon:-80},
        mapOptions = {
            zoom: 5,
            center: new google.maps.LatLng(myLocation.lat, myLocation.lon),
            mapTypeId: google.maps.MapTypeId.PLAN,
            disableDefaultUI: true
        };

    $('#canvas-map').css("height", "200px").css("padding", "0px");
    map = new google.maps.Map(document.getElementById('canvas-map'), mapOptions);

    /** MyPosition **/
    marker = new google.maps.Marker({
        map: map,
        draggable: false,
        animation: google.maps.Animation.DROP,
        position: new google.maps.LatLng(myLocation.lat, myLocation.lon),
    });
}

別のページから上記のページに移動すると、次の結果が得られます。 壊れたグーグルマップ

そして、更新すると、期待される結果が得られます。 更新された Google マップは正常に動作します

キャンバスは(赤で)表示されているので、明らかに問題ありません。さらに、マップをナビゲートすると、正しい位置にマーカーが表示されます。これらのスクリーンショットは Google Chrome を使用して作成されました。Firefox で試してみましたが、キャンバスは完全に赤く、マップはまったくありません。

PS: これは私の元のコードの単純なバージョンですが、動作は同じです。

編集:

詳細については Gajotres の回答を参照してください。ただし、基本的には、map.html ページにアクセスするためのリンク内に追加するとtarget="_blank"、問題は解決しました。target="_self"デフォルト値であると想定されているため、奇妙にも機能しているように見えることに注意してください。ターゲット の詳細はこちら.

4

3 に答える 3

7

google maps v3フレームワークを jQuery Mobile で簡単に実装できる裏技があります。

ここで問題について話しましょう。コンテンツ div に高さと幅の問題があります。これは主に、ページのサイズを正しく計算できるのはpageshowイベント中のみであるためです。しかし、それでも content div はページ全体をカバーしません。

あなたの問題は少しの CSS で解決できます:

#content {
    padding: 0 !important;
    position : absolute !important; 
    top : 40px !important;  
    right : 0 !important; 
    left : 0 !important;     
    height: 200px !important;
}

基本的に、コンテンツが利用可能なスペースをカバーするように強制しています。

作業例: http://jsfiddle.net/RFNPt/2/

最終的解決 :

index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <script src="http://maps.google.com/maps/api/js?sensor=true"></script>      
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
        <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> 
        <title>MyTitle</title>
    </head>
    <body> 
        <div data-role="page" class="page"> 
            <div data-role="content" id="index-content">
                <div id="menu">
                    <a href="map.html" data-role="button" target="_blank">Map</a>
                </div> 
            </div> 
        </div> 
    </body> 
</html>

map.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <script src="http://maps.google.com/maps/api/js?sensor=true"></script>      
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
        <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> 
        <title>MyTitle</title>
    </head>
    <body>
        <div data-role="page" id="map-page">            
            <div data-role="content" id="content">
                <div id="canvas-map" style="height:100%"/>
            </div>      
            <style>
                #content {
                    padding: 0 !important; 
                    position : absolute !important; 
                    top : 0 !important; 
                    right : 0 !important; 
                    bottom : 40px !important;  
                    left : 0 !important;     
                }       
            </style>            
            <script type="text/javascript">         
                $(document).on('pageshow', '#map-page', function(e, data) {
                    var marker, map, 
                        myLocation = { 
                            lat: 50, 
                            lon: -80 
                        }, 
                        mapOptions = { 
                            zoom: 5, 
                            mapTypeId: google.maps.MapTypeId.PLAN, 
                            center: new google.maps.LatLng(myLocation.lat, myLocation.lon) 
                        }; 
                    $('#canvas-map').css("height", "200px").css("padding", "0px"); 
                    map = new google.maps.Map(document.getElementById('canvas-map'), mapOptions); 
                    marker = new google.maps.Marker({ 
                        map: map, 
                        position: new google.maps.LatLng(myLocation.lat, myLocation.lon), 
                    });     
                }); 
            </script>           
        </div>
    </body>
</html>

このARTICLEを見ると、このトピックに関するより多くの情報と例が見つかります。

于 2013-07-18T10:02:08.353 に答える