2010-10-28 54 views
4

我有一个v3谷歌地图加载完全符合我的预期和标记做我想要的。但是,当我更改缩放时,我添加的zoom_changed事件似乎不会触发。任何人都可以解释为什么?我的代码如下。谷歌地图v3 zoom_changed事件不会触发当变焦变化

function map_initialise() { 
    var mapCentre = new google.maps.LatLng(53.75, -1.50); 
    var mapOptions = { 
     zoom: 6, 
     center: mapCentre, 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    } 

    var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); 

    var latlong1 = new google.maps.LatLng(52.456550,1.680182); 
    var windowtext1 = 'Some text'; 
    var popup1 = new google.maps.InfoWindow({ 
     content: windowtext1 
    }); 
    var marker1 = new google.maps.Marker({ 
     position: latlong1, 
     title: "Some text" 
    }); 
    google.maps.event.addListener(marker1, 'click', function() { 
     popup1.open(map,marker1); 
    }); 
    marker1.setMap(map); 
} 

google.maps.event.addDomListener(window, 'load', map_initialise); 

google.maps.event.addListener(map, 'zoom_changed', function() { 
    setTimeout(reCentre, 3000); 
}); 

function reCentre() { 
    var newcentre = new google.maps.LatLng(53.000,0.000); 
    map.panTo(newcentre); 
} 

回答

11

2东西...

  1. 眼下没有被添加你的听众ZOOM_CHANGED监守地图初始化之前,它被称为。 Javascript执行map_initialise()函数,然后立即尝试并在地图加载完成之前添加侦听器。因此,在最后将addListener放入初始化函数中。

  2. 您的地图变量对于map_initialise()函数是私有的,所以当调用reCentre()时,它无法看到您的地图对象。如果您从地图前删除var,它将变为全局,reCentre()将能够看到它。我建议在map_initialise()函数上面添加var map;,以便代码的读者能够看到map是全局的。

+1

谢谢,盖伦。随着这些细微的变化,事件现在正在发射。 – Jason 2010-11-01 09:07:18

+0

谢谢..很好的回答......................... – 2014-07-09 12:51:34

2

如果推荐的解决方案有效,它可能只是一个巧合,涉及一个小的,简单的地图。在一个大型的混合地图上,它并不能解决问题,这实际上更复杂。 zoom_changed的监听器确实被添加,并在那一刻触发一次;该侦听器的动作部分将正确执行。但此后,在变焦控制每一次点击将导致以下消息出现在Firefox的错误控制台:

Error: g.e is undefined
Source File: http://maps.gstatic.com/intl/en_us/mapfiles/api-3/10/20/main.js
Line: 19

,不进行监听行动。

如果包含了“地方”库(支持搜索框),行为是相同的,但在错误信息源文件不同的是:

Error: g.e is undefined
Source File: http://maps.gstatic.com/cat_js/intl/en_us/mapfiles/api-3/10/20/%7Bmain,places%7D.js
Line: 19

是什么使建议的解决方案更可疑的是,可以在zoom_changed监听器之前添加标记和其他监听器(用于在地图上和标记上“点击”),并且它们始终可靠地工作。