有没有一种很好的方法来检测地图的缩放动画何时结束? 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
}
答案 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。