In my research, calling google.maps.event.trigger(map, "resize"); was a consistent suggestion, but the first few locations I tried calling it did not work. I finally solved the problem by binding the trigger to the click event of the jQuery Accordion pane, based on an example at essentialwebconcepts.com.
My code:
function triggerMapResize()
{
google.maps.event.trigger(map, "resize");
}
jQuery(document).ready(function() {The only remaining problem is that the center of the map changes when the user returns to the map pane after looking at a different pane. I started a topic on SO for this issue.
jQuery("#the-accordion").bind('accordionchange', function(event, ui) {
if (ui.newContent.attr('id') == 'the-pane-id')
{
triggerMapResize();
}
});
});
Update August 24:
Several changes were required to get this to work on all browsers including IE. IE failed upon page load when I was trying to initialize the map. Originally I was using window.onload = function () { initialize_map(); } but that resulted in a vague IE error.
I added code to capture the map's center LatLng when the user moves the mouse outside the map canvas, and more code to move the center to that point upon returning to the map.
var map=null;
var currMapCenter = null;
jQuery(document).ready(function() {
jQuery("#accordion").bind('accordionchange', function(event, ui) {
if (ui.newContent.attr('id') == 'region-list')
{
if(map==null) {
//first load; call map initialization
initialize_map();
}
triggerMapResize();
}
});
function initialize_map() {
//do initialization here...
google.maps.event.addListener(map, 'mouseout', function() {
currMapCenter=map.getCenter();
});
}
function triggerMapResize() {
google.maps.event.trigger(map, "resize");
map.setCenter(currMapCenter);
}
A side note about another problem I ran across in IE8 that has limited documentation online: When creating LatLng arrays, double-check syntax to be sure there is no comma after the final element. While the map looked perfect in standards-compliant browsers, in IE8 each polygon had a segment extending up to near the North Pole.
var polygonPoints= [
new google.maps.LatLng(24.3250983277945,-79.4028109345145),
new google.maps.LatLng(48.9377507851552,-142.984008088915),
new google.maps.LatLng(37.9247004907078,-131.891417410329),
new google.maps.LatLng(29.8055038628199,-122.143142289543),
new google.maps.LatLng(21.6909424687438,-114.135809333967),
new google.maps.LatLng(24.3250983277945,-79.4028109345145),
];
This mistake cost me an hour of confusion. Finally I found a discussion mentioning trailing commas with Google Maps in Internet Explorer and discovered the improper extra comma at the end of each array. It was caused by creating the LatLng object using concatenation in Excel without manually trimming the last value.
No comments:
Post a Comment