我有一个关于谷歌地图v3缩放更改的问题,因为它不能完美地满足我的需求。
我有两个未满足的要求:
我需要获取范围并显示范围内的点,这些点是在用户单击缩放控件并且地图中的缩放已经被调整之后的。方法zoom_change在重新调整缩放之前执行此操作,而范围不是我所需要的。
每当我执行fitBounds或setZoom时,都会调用方法zoom_change。我只需要在单击缩放控件或移动鼠标滚轮时才需要它。
在v3 API中是否有可用的解决方案来解决这些问题?
我有一个关于谷歌地图v3缩放更改的问题,因为它不能完美地满足我的需求。
我有两个未满足的要求:
我需要获取范围并显示范围内的点,这些点是在用户单击缩放控件并且地图中的缩放已经被调整之后的。方法zoom_change在重新调整缩放之前执行此操作,而范围不是我所需要的。
每当我执行fitBounds或setZoom时,都会调用方法zoom_change。我只需要在单击缩放控件或移动鼠标滚轮时才需要它。
在v3 API中是否有可用的解决方案来解决这些问题?
这个事件被称为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);
zoom_end
的问题。 zoom-changed
事件在需要新的缩放级别时触发,而不是在缩放动画完成时触发,这正是提问者(和我)想要的。 - Beetroot-Beetroot我发现唯一可行的方法是在地图上创建自定义缩放控件。
然后在控件上设置事件监听器,
显然不太优雅,但是这是一个选项。