如何检测缩放结束?

时间:2015-11-13 19:19:17

标签: openlayers-3

有没有一种很好的方法来检测地图的缩放动画何时结束? OpenLayers用于提升动物游戏'缩放完成后的事件,但OpenLayers 3没有相应的事件。我目前正在使用以下方法,但它似乎充其量只是脆弱而且很脆弱。

function main() {
  var map = ...;
  map.getView().on('change:resolution', handleResolutionChange);
}
function handleResolutionChange() {
  var map = ...;
  map.once('moveend', handleMoveEnd);
}
function handleMoveEnd() {
  setTimeout(handleZoomEnd, 0);
}
function handleZoomEnd() {
  //Handle the 'Zoom end' event
}

3 个答案:

答案 0 :(得分:3)

你自己尝试了moveend事件????我没有尝试过,但它也应该在zoomend上升。此外,'change:resolution'事件未记录在案。它真的有效吗?

尝试以下

var ghostZoom = map.getView().getZoom();
    map.on('moveend', (function() {
        if (ghostZoom != map.getView().getZoom()) {
            ghostZoom = map.getView().getZoom();
            console.log('zoomend');
        }
    }));

答案 1 :(得分:1)

我知道这个问题已经有一段时间了。我只想分享我的想法。

    let isMapResolutionChanged;
    map.getView().on('change:resolution', () => {
        isMapResolutionChanged = true;
    });

    map.on('moveend', () => {
        if (isMapResolutionChanged) {
            console.log('fire moveend + zoomend')
        }
    });

答案 2 :(得分:1)

只是想分享我的解决方案,因为我偶然发现了同样的问题:

let zoomend = function(evt) {
  alert('zoomend on resolution: ' + evt.map.getView().getResolution());    
  evt.map.once('moveend', function(evt) {
    zoomend(evt);
  });
};
map.getView().once('change:resolution', function(evt) {
  map.once('moveend', function(evt) {
    zoomend(evt);
  });
});

此处change:resolution事件仅在缩放操作开始时触发一次,并在完成时再次激活。 您可以查看有效的fiddle