我正在使用Google地图和Angularjs开发应用。我有这个代码来控制缩放是否改变
google.maps.event.addListener(map, 'zoom_changed', function(){
});
问题是,我只有在用户更改缩放时才需要执行此事件。我的代码中还有一个fitBounds()
也可以更改缩放。
var latlngbounds = new google.maps.LatLngBounds();
for (var i = 0; i < latlng.length; i++) {
latlngbounds.extend(latlng[i]);
}
map.fitBounds(latlngbounds);
是否可以选择区分用户操作?
答案 0 :(得分:0)
好的,我找到了方法
google.maps.event.addListenerOnce(map, 'mousemove', function(){
google.maps.event.addListener(map, 'zoom_changed', function(){
});
});
首先,它检测鼠标是否移动,然后检测缩放是否改变并且正常工作!
答案 1 :(得分:0)
在一般情况下,当前接受的解决方案可能无法正确解决此问题。转到interactive demo,以获取Google Maps API文档中的地图UI事件。请注意,如果将光标放在地图上并用鼠标的滚轮滚动,则不会触发mouse
或drag
事件,因为鼠标保持静止。
当前解决方案假定在mouseover
事件之后不会进行程序化地图更新,这对于原始发布者的应用程序可能是正确的,但在更通用的应用程序中可能不是正确的。
我在下面提出了替代解决方案。
首先,无论您以何种方式在代码中以编程方式更新地图,都应在地图上设置自定义属性(我们将其称为systemZoomChange
),以指示更改是通过编程方式发起的。
var latlngbounds = new google.maps.LatLngBounds();
for (var i = 0; i < latlng.length; i++) {
latlngbounds.extend(latlng[i]);
}
map.systemZoomChange = true
map.fitBounds(latlngbounds);
然后在任何事件侦听器上,添加对自定义systemZoomChange
属性的检查,并在被标记时将其重置,以避免对系统事件起作用。
map.addListener('zoom_changed', function () {
if (map.systemZoomChange) {
map.systemZoomChange = false // Reset the flag for a system-initiated event
} else {
// Handle the user-initiated event
}
});