2012-01-02 49 views
0

我有一個奇怪的問題,谷歌地圖,我只能在Firefox中複製。爲了解釋,我們有一個靜態地圖,當點擊時放大到一個完整的可交互的地圖,中間有一個標記。這在所有瀏覽器都可以正常工作,除了Firefox。 在Firefox中,會發生什麼情況是地圖未正確居中。標記被放置,但是它位於可見區域外的地圖的左上角。谷歌地圖不集中在Firefox

任何想法?這一直困擾着我一段時間。

的JavaScript:

// lat and lng are initialized earlier 
var latlng = new google.maps.LatLng(lat, lng); 
var myOptions = { 
    zoom: 13, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
}; 

var map = new google.maps.Map($("#map_canvas")[0], myOptions); 

var marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    icon: icon 
}); 

var resizeMap = function() { 
    $("#smallMap, #smallMapOverlay").remove(); 
    $("#map_canvas").show(); 
    google.maps.event.trigger(map, 'resize'); 
    map.setCenter(latlng, 13); 
}; 

$("#smallMapOverlay").live("click", function (e) { 
    e.preventDefault(); 
    resizeMap(); 
}); 

CSS:

#map_canvas { 
    width: 640px; 
    height: 377px; 
} 
+0

你可以創建一個http://jsfiddle.net/演示嗎? – 2012-01-02 09:59:06

回答

0

似乎把resizesetCenter方法引入show()的回調,並給予一個微小的延遲修復該問題。

var resizeMap = function() { 
    $("#smallMap, #smallMapOverlay").remove(); 
    $("#map_canvas").show(10, function() { 
     google.maps.event.trigger(map, 'resize'); 
     map.setCenter(latlng, 13); 
    }); 
}; 

這不是最優雅的解決方案,但它的工作原理。

0

Karim79'fix works。我以一種稍微不同的方式解決了這個問題。如果你有一個包裝類來處理映射功能,您可以創建像這樣復位功能,

function reset(){ 
     setTimeout(function(){gm.event.trigger(_gMap, 'resize');}, 50); 
     setTimeout(function(){_gMap.setCenter(settings.mapOptions.center);}, 100); 
    } 

最佳