Openlayers 3 确定映射moveend事件是否由用户启动

Openlayers 3 确定映射moveend事件是否由用户启动,openlayers-3,Openlayers 3,我在服务器上注册了一个“moveend”事件侦听器。当地图被用户输入移动时,它会启动,但当我呼叫并启动时也会启动 是否可以检查“moveend”以确定事件是由用户输入触发的,还是由手动更改地图视图的属性触发的?我最后执行了以下操作 map.on('moveend', function(event) { var mapView = map.getView(), moveInitiatedProgrammatically = mapView.get('moveInitiatedPro

我在服务器上注册了一个“moveend”事件侦听器。当地图被用户输入移动时,它会启动,但当我呼叫并启动时也会启动


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

我最后执行了以下操作

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);
这并不理想,原因如下:

  • 在地图视图中引入其他状态信息
  • 不小心替换地图视图将丢失该状态信息
  • 在更改视图状态之前需要设置属性,可能太容易忘记

  • 然而,它同时解决了我的问题。

    我最后做了以下几点

    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);
    
    这并不理想,原因如下:

  • 在地图视图中引入其他状态信息
  • 不小心替换地图视图将丢失该状态信息
  • 在更改视图状态之前需要设置属性,可能太容易忘记

  • 但是,它同时解决了我的问题。

    似乎没有容易(也不难)区分用户交互的方法。似乎没有容易(也不难)区分用户交互的方法。