【问题标题】:Identifying if a map moveend event was user initiated识别地图 moveend 事件是否是用户发起的
【发布时间】:2016-02-02 20:38:49
【问题描述】:

我在ol.Map 上注册了一个“moveend”事件侦听器。当用户输入移动地图时,它会触发,当我调用ol.View.setCenterol.View.setResolution 时也会触发。

是否可以检查“moveend”ol.MapEvent 以确定事件是由用户输入触发还是由手动更改地图视图的属性触发的?

【问题讨论】:

  • 看起来没有简单的方法(也没有困难)来区分用户交互。

标签: openlayers-3


【解决方案1】:

我最终做了以下事情。

map.on('moveend', function(event) {
  var mapView = map.getView(),
      moveInitiatedProgrammatically = mapView.get('moveInitiatedProgrammatically') || false;

  mapView.unset('moveInitiatedProgrammatically');

  // evaluate moveInitiatedProgrammatically's value and behave accordingly...
});

map.getView().set('moveInitiatedProgrammatically', true);
map.getView().setCenter(coord);

这并不理想,原因如下:

  1. 在地图视图中引入额外的状态信息。
  2. 不小心替换地图视图会丢失该状态信息。
  3. 需要在更改视图状态之前设置属性,并且很容易忘记。

不过,它同时解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多