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

3
我一直在阅读Google Maps API文档,看是否可以区分系统事件和用户事件?
例如,当使用setZoom、fitBounds等方法时,会触发zoom_changed事件,而这不是我想要的,我只想知道用户何时改变了缩放级别。
不幸的是,click事件仅在地图本身上触发,而不是控件,因此您无法依靠该方法来检测用户输入。
有什么好的想法吗?
2个回答

1

虽然我无法使用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();
});

不是完美的,但它确实可以工作。

很想看到其他的实现方式。


0

您也可以考虑我在这个Stack Overflow答案中提出的另一种解决方案,它不依赖于鼠标事件来识别用户发起的更改。

而是在使用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
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接