2011-11-04 66 views
0

我正在尝试在我的页面上创建带有标记的Google地图。我有一个无序列表,其中每个项目都有纬度,经度和标题的数据属性。使用JQuery我拉这些值,并在地图上为列表中的每个项目生成一个标记。一切似乎都可以正常工作,除非谷歌地图在地图周围平移时不会加载切片。添加事件监听器会导致Google地图冻结

google map tiles not loading

这是我如何初始化地图:

var map; 
// initialize google map 
$(function() { 
    var myOptions = { 
     zoom: 10, 
     center: new google.maps.LatLng(CoordinatesLat, CoordinatesLong), 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     mapTypeControl: false 
    } 
    // initiate map 
    map = new google.maps.Map($("#map")[0], myOptions); 

    // when map is loaded, add events and behaviors to it 
    google.maps.event.addListenerOnce(map, 'tilesloaded', addEventsToMap(".event")); //commenting this line prevents GMAP problems 
}); 

仅供参考 - 我用maps.event.addListener()之前,地图将暂时工作,然后变得完全没有反应。将其更改为maps.event.addListenerOnce()可以阻止冻结,但仍然存在加载问题。

这是回调,显然在那里我做错了什么:

//add events from event list to map. add behavior to events ie. mouseover 
function addEventsToMap(selector) { 
    $(selector).each(function (i, $e) { 
     $e = $($e); 
     var latlng; 
     if ($e.attr("data-geo-lat") && $e.attr("data-geo-long")) { 
      latlng = new google.maps.LatLng($e.attr("data-geo-lat"), $e.attr("data-geo-long")); 

      $e.marker = new google.maps.Marker({ 
       position: latlng, 
       map: map, 
       title: $e.attr("data-title") 
      }); 

      google.maps.event.addListener($e.marker, 'click', function() { window.location = $e.attr("data-href"); }); 
      google.maps.event.addListener($e.marker, 'mouseover', function() { $e.addClass("event-hover"); }); 
      google.maps.event.addListener($e.marker, 'mouseout', function() { $e.removeClass("event-hover"); }); 

      //when mouse hovers over item in list, center map on it's marker 
      $e.mouseenter(function() { 
       map.panTo(latlng); 
      }); 
     } 
    }); 
} 

任何想法可能是什么造成的?

+0

直接显示#map元素吗?在隐藏该点的元素中启动地图时遇到问题。 –

+0

是地图元素立即显示;不隐藏。 – wycleffsean

回答

1

我看到一个问题,但我不确定这是否是问题。如果你检查这行:

google.maps.event.addListenerOnce(map, 'tilesloaded', addEventsToMap(".event")); 

什么你打算做的是调用一次地图加载你的“addEventsToMap”,而是你正在做的是调用该函数,然后赋予的,作为返回值一个听众。

你需要这个,而我认为它不应该崩溃了。

google.maps.event.addListenerOnce(map, 'tilesloaded', function() { 
    addEventsToMap(".event"); 
}); 

如果不行,我会建议在看什么浏览器使用的是JavaScript控制台,看看有什么错误发生,使地图崩溃。