2011-09-01 113 views
4

我有一个谷歌地图v3 zoom_change的问题,因为它不能完美解决我的需求。谷歌地图v3缩放结束

我有2个未满足的要求:

  • 我需要得到那些边界后,用户在缩放控制点击,缩放已经在地图上被reajusted里面的边界和展示点。方法zoom_change做它之前重新缩放,并且边界不是我需要的。

  • 方法zoom_change被称为每次,例如,每当我执行fitBoundssetZoom。当单击zoomcontrol或移动鼠标滚轮时,我只需要它。

在v3 API中是否有解决这些问题的解决方案?

回答

6

该事件被称为zoom_changed(不是zoom_change)。此事件的事件处理程序在缩放后发生更改后调用。确实不是直截了当地阻止用户从该程序引起的缩放变化。一个可能的解决方案是保持一个“全局”变量,如userZoom,它表示用户是否触发了缩放。

var userZoom = true; // initial value: be prepared for user action 
// Install listener 
google.maps.event.addListener(Map.self, 'zoom_changed', function() { 
    if (userZoom) {  
     // the user changed zoom: do what should be done 
    } 
    else { 
     // zoom change caused by a program action: ignore 
    } 
    userZoom = true; // be prepared for the user zoom action  
}); 

调用任何改变变焦的程序操作之前,设置userZoom = false,例如

userZoom = false; 
map.setZoom(9); 
+0

这是一个优秀的,透明的解决方案。感谢分享 – Haroldo

+1

这个答案很有用,但没有解决检测'zoom_end'的问题。当需要新的缩放级别时,会发生“缩放变化”,而不是当缩放动画完成时,这是OP想要的(我也是如此)。 –

4

听取空闲事件。

Google Maps Javascript API V3 Reference

空闲:在地图上变成平移或缩放 闲置后会触发此事件。

+0

这 - 谢谢。我正在单独处理拖动和缩放。这更优雅。 – Thilo

0