我一直在阅读Google Maps API文档,看看系统事件与用户事件之间是否有区别?
例如,当您使用zoom_changed
,setZoom
等方法时会触发fitBounds
事件,这在我的实现中是令人讨厌的,因为我只想知道用户何时实际上会改变缩放级别。
不幸的是,click
事件仅在地图本身而不是控件上触发,因此您不能依赖该方法来帮助检测用户输入。
想法?
答案 0 :(得分:0)
虽然我无法使用Google Maps API解决这个问题,但我创建了一个解决方法,让我在更改地图缩放或定位之前调用此方法而不需要用户互动:
MapGraph.prototype.systemMove = function() {
var _this = this;
this.isMoving = true;
return setTimeout(function() {
return _this.isMoving = false;
}, 500);
};
我的事件绑定看起来像这样:
google.maps.event.addListener(this.map, 'dragend', function(event) {
if (!_this.isMoving) return _this.mapChanged();
});
不完美,但确实有效。
很想看到任何其他实现。
答案 1 :(得分:0)
您还可以考虑我在this Stack Overflow answer中提出的替代解决方案,该解决方案不依赖鼠标事件来识别用户启动的更改。
每当通过setZoom
或fitBounds
启动编程更改时,都不要在尝试识别用户事件时向地图添加标志。
map.systemChange = true
map.setZoom()
然后检查(并重置)事件监听器中的标志。
map.addListener('zoom_changed', function () {
if (map.systemChange) {
map.systemChange = false // Reset the flag for a system-initiated event
} else {
// Handle the user-initiated event
}
});