Javascript OpenLayers before zoom event listener

前端 未结 5 1936
醉酒成梦
醉酒成梦 2021-02-09 03:46

I am trying to set up OpenLayers to not display the vector layer just before a zoom starts and make it reappear after a zoom ends. I have the zoom ends part already established

相关标签:
5条回答
  • 2021-02-09 03:48

    Here is a easy to add the 'BeforeZoom' event to the OpenLayers . Just add the code below to where you created your map object.

    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
    };
    

    How this works:

    For any kind of zooming activity, OpenLayers API ultimately calls the function called zoomTo. So before overriding it, we copy that function to a new function called 'zoomToProxy'. The we override it and add our conditional zoom logic. If we want the zoom to happen we just call new proxy function :)

    0 讨论(0)
  • 2021-02-09 03:48

    "movestart" handles "zoomstart". To detect if the zoomstart, try:

     map.events.register("movestart",map, function(e) {
            if(e.zoomChanged)
            {
            //zoom start code here
            }
    
        });
    
    0 讨论(0)
  • 2021-02-09 03:49

    I had the same problem that OP had, and I tried to solve it with drnextgis's solution. But unfortunately it didn't completely work:: the zoomChanged property in OpenLayers.Map.moveTo evaluates to true not only when the zoom level has changed, but also when the map has been resized.

    My map was 100% of the user's browser window, so if they resized the window, the event would be triggered. This was undesirable for me, as I only wanted to trigger the event if the zoom level had actually changed. My solution was to create an new event, called "zoomstart", which I inserted at the top of OpenLayers.Map.moveTo. Here's the code:

    var getZoom = this.getZoom();
    if ( !!getZoom && !!zoom && this.isValidZoomLevel(zoom) && getZoom != zoom )
        this.events.triggerEvent("zoomstart", zoom);
    

    This code will pass the new zoom level to an event listener that is registered to zoomstart, and in my case I determine the map's restrictedExtent and do other stuff based upon the new zoom level.

    Peace be with ye.

    0 讨论(0)
  • 2021-02-09 04:06

    Solution of "Shaunak" is worked very well for me. I want to restrict zooming below 11 so edited his code as

    if (zoom > 11) {
        map.zoomToProxy(zoom, xy);
    }
    
    0 讨论(0)
  • 2021-02-09 04:08

    For this purpose you should override moveTo and moveByPx methods of OpenLayers.Map for eliminate movestart event triggering for any actions except zooming.

    0 讨论(0)
提交回复
热议问题