缩放事件监听器之前的Javascript OpenLayers

ren*_*sis 8 javascript google-maps zooming openlayers

我正在尝试将OpenLayers设置为在缩放开始之前不显示矢量图层,并在缩放结束后重新显示它.我有缩放结束部分已经建立如下:

map = new OpenLayers.Map('map_element', { eventListeners: { "zoomend": mapEvent}});

function mapEvent(event) {
    if(event.type == "zoomend") {
        hide_vector_layer();
        }
}
Run Code Online (Sandbox Code Playgroud)

但我没有看到任何类型的事件监听器开始放大文档.有一个"movestart",涵盖了移动,平移和缩放.不幸的是,我不能使用"movestart",因为我不希望图层在平移期间消失.你会认为会有一个"zoomstart",因为有一个"zoomend".

我试图这样做的原因是因为我不喜欢当使用谷歌地图作为基础层时矢量图层以不同的速率缩放.它看起来不对,看起来所有功能都不准确,即使它们在缩放完成后落在正确的位置.

有什么建议?

Sha*_*nak 8

这是一个很容易将'BeforeZoom'事件添加到OpenLayers.只需将下面的代码添加到您创建地图对象的位置即可.

map.zoomToProxy = map.zoomTo;
map.zoomTo =  function (zoom,xy){
    //Your Before Zoom Actions

    //If you want zoom to go through call
    map.zoomToProxy(zoom,xy); 
    //else do nothing and map wont zoom
};
Run Code Online (Sandbox Code Playgroud)

这是如何工作的:

对于任何类型的缩放活动,OpenLayers API最终会调用名为zoomTo的函数.因此,在覆盖它之前,我们将该函数复制到一个名为"zoomToProxy"的新函数中.我们覆盖它并添加条件缩放逻辑.如果我们想要缩放,我们只需调用新的代理功能:)


drn*_*gis 2

为此,您应该重写 OpenLayers.Map 的 moveTo 和 moveByPx 方法,以消除除缩放之外的任何操作的 movestart 事件触发。