Google maps Google Map API v3如果重新加载会偏离中心(不是通常的调整大小)

Google maps Google Map API v3如果重新加载会偏离中心(不是通常的调整大小),google-maps,jquery-mobile,google-maps-api-3,Google Maps,Jquery Mobile,Google Maps Api 3,我读了所有类似的问题,但我的略有不同。第一次显示JQuery Mobile对话框时,地图会在通常的map_canvas div中很好地加载,但是如果重新加载该对话框(即返回并单击按钮再次打开对话框),它只会部分显示,缩小到3或4,并以div的左上角为中心 div大小(显式设置)没有变化,为了更好地度量agoogle.maps.event.trigger(map'resize')被调用 我还尝试在显示对话框后初始化贴图,但结果相同 按钮代码: $("#dest-map-button").click

我读了所有类似的问题,但我的略有不同。第一次显示JQuery Mobile对话框时,地图会在通常的map_canvas div中很好地加载,但是如果重新加载该对话框(即返回并单击按钮再次打开对话框),它只会部分显示,缩小到3或4,并以div的左上角为中心

div大小(显式设置)没有变化,为了更好地度量a
google.maps.event.trigger(map'resize')被调用

我还尝试在显示对话框后初始化贴图,但结果相同

按钮代码:

$("#dest-map-button").click(function() {
            initializeMap(job_id,"map_canvas");
        }
);
功能:

function initializeMap(job_id, map_div){

    var pos = arrJobs[job_id].lat_lng.split(',');
    var job_pos = new google.maps.LatLng(pos[0],pos[1]);

    var driverLatLng = lat_lng.split(',');
    var driver_pos = new google.maps.LatLng(driverLatLng[0],driverLatLng[1]);

    var myOptions = {
        zoom: 18,
        center: driver_pos,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        disableDefaultUI: true
    }

    map = new google.maps.Map(document.getElementById(map_div), myOptions);

    var marker = new google.maps.Marker({
        position: job_pos,
        map: map,
        title: "Job"
    }); 

    var marker2 = new google.maps.Marker({
        position: driver_pos,
        map: map,
        title: "X",
    }); 

    google.maps.event.trigger(map, 'resize');
}   
HTML:


地图画布
有什么想法吗

编辑:这个问题似乎描述了完全相同的问题:
但此处不能使用提供的解决方案(缓存),因为映射可能需要更改
var driverlatng
正在使用
lat_lng.split(',')初始化
以前从未声明过。

在尝试了所有其他方法后,我终于偶然发现了
pageshow
事件。在完成所有页面转换后而不是单击按钮时调用
initializeMap
,解决了问题:

$('#dialog-destination-map').live('pageshow',function(event){
    initializeMap(job_id,"map_canvas");
    }
);

我仍然想知道为什么它在第一次加载时就工作了…

您不需要每次访问页面时都创建一个新的地图。预先创建地图,例如在
pageinit
上。在
pageshow
google.maps.event.trigger(mapObj,“resize”)

我同意@peter。。您不需要在每个pageshow事件上创建地图。。相反,请尝试以下方法:

$(document).on("pagebeforechange", function()
{
    if(mapObj){
        center = mapObj.getCenter();
    }
});
$("#mapPage").bind("pageshow", function()
{
    google.maps.event.trigger(mapObj, "resize");
    if(center)mapObj.setCenter(center);
});

这是一个全局变量。正如我提到的,这在第一次加载时起作用。伙计们,这对我不起作用。你能帮我吗??这是我的问题
$(document).on("pagebeforechange", function()
{
    if(mapObj){
        center = mapObj.getCenter();
    }
});
$("#mapPage").bind("pageshow", function()
{
    google.maps.event.trigger(mapObj, "resize");
    if(center)mapObj.setCenter(center);
});