Google Maps API v3中的用户与系统事件

时间:2012-01-21 05:06:02

标签: google-maps google-maps-api-3

我一直在阅读Google Maps API文档,看看系统事件与用户事件之间是否有区别?

例如,当您使用zoom_changedsetZoom等方法时会触发fitBounds事件,这在我的实现中是令人讨厌的,因为我只想知道用户何时实际上会改变缩放级别。

不幸的是,click事件仅在地图本身而不是控件上触发,因此您不能依赖该方法来帮助检测用户输入。

想法?

2 个答案:

答案 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中提出的替代解决方案,该解决方案不依赖鼠标事件来识别用户启动的更改。

每当通过setZoomfitBounds启动编程更改时,都不要在尝试识别用户事件时向地图添加标志。

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
  }
});