Leaflet: рдирдХреНрд╢рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ map.remove() рдкрд░ DOM рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рд╕рд┐рддре░ 2017  ┬╖  37рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Leaflet/Leaflet

рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ

  • рдкрддреНрд░рдХ рд╕рдВрд╕реНрдХрд░рдг рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ: 1.2.0
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде) рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ: рдХреНрд░реЛрдо рд╕рдВрд╕реНрдХрд░рдг 60.0.3112.13
  • рдпрд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рд╕рдлрд╛рд░реА рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЖрдИрдИ, рдПрдЬ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
  • OS/рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде) рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ: macOS Sierra
  • div рддрддреНрд╡ рдореЗрдВ рдирдХреНрд╢рд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд░рдд рдЬреЛрдбрд╝реЗрдВ
this.leafletMap = new L.Map( <element> , {
            zoomControl: true, 
            dragging: this.isInDragMode, 
            touchZoom: false,
            scrollWheelZoom: false,
            doubleClickZoom: false,
            tap: false,
}
L.tileLayer( 'http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
            attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
                } ).addTo( this.leafletMap );
  • рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд░ рдирдХреНрд╢рд╛ рдирд┐рдХрд╛рд▓реЗрдВ
if (this.leafletMap ){
        this.leafletMap.eachLayer(function(layer){
            layer.remove();
        });
        this.leafletMap.remove();
        this.leafletMap = null;
    }

рдореИрдВ рдХрд┐рд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреМрди рд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ

  • рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рддрддреНрд╡ рд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдореИрдВ div рдкрд░ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ - Uncaught TypeError: Cannot read property '_leaflet_pos' of undefined
    рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдкрд░рддреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж DOM рддрддреНрд╡ рдЕрднреА рднреА рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝ рд░рд╣рд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг

  • [] рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реИ
  • [ ] рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

http://playground-leaflet.rhcloud.com/ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп jsfiddle рдЬреИрд╕реА рд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@spydmobile рдпрд╣рд╛рдБ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣реА рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ:
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рдПрдл * рдЖрдИрдПрдирдЬреА рдЯрд┐рдкреНрдкрдгреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдб рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред
рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЕрдм рд▓рдЧрднрдЧ 10 рдмрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ lol

function removeMap()
{
    var leafletCtrl = get_your_own_leaflet_reference_from_somewhere(), 
    dom = leafletCtrl.getReferenceToContainerDomSomehow(); 

    //This removes most of the events
    leafletCtrl.off();

//After this, the dom element should be good to reuse, unfortunatly it is not
    leafletCtrl.remove(); 

    var removeDanglingEvents = function(inputObj, checkPrefix)
    {
        if(inputObj !== null)
        {
            //Taken from the leaflet sourcecode directly, you can search for these constants and see how those events are attached, why they are never fully removed i don't know
            var msPointer = L.Browser.msPointer,
            POINTER_DOWN =   msPointer ? 'MSPointerDown'   : 'pointerdown',
            POINTER_MOVE =   msPointer ? 'MSPointerMove'   : 'pointermove',
            POINTER_UP =     msPointer ? 'MSPointerUp'     : 'pointerup',
            POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel';

            for(var prop in inputObj)
            {
                var prefixOk = checkPrefix ? prop.indexOf('_leaflet_') !== -1 : true, propVal; //if we are in the _leaflet_events state kill everything, else only stuff that contains the string '_leaflet_'
                if(inputObj.hasOwnProperty(prop) && prefixOk)
                {
                    //Map the names of the props to the events that were really attached => touchstart equals POINTER_DOWN etc
                    var evt = []; 
                    if(prop.indexOf('touchstart') !== -1) //indexOf because the prop names are really weird 'touchstarttouchstart36' etc
                    {
                        evt = [POINTER_DOWN];
                    }
                    else if(prop.indexOf('touchmove') !== -1)
                    {
                        evt = [POINTER_MOVE];
                    }
                    else if(prop.indexOf('touchend') !== -1)
                    {
                        evt = [POINTER_UP, POINTER_CANCEL];
                    }

                    propVal = inputObj[prop];
                    if(evt.length > 0 && typeof propVal === 'function')
                    {
                        evt.each(function(domEvent)
                        {
                            dom.removeEventListener(domEvent, propVal, false);
                        });                    
                    }

                    //Reference B-GONE, Garbage b collected.
                    inputObj[prop] = null;
                    delete inputObj[prop];
                }
            }
        }        
    };

    removeDanglingEvents(dom._leaflet_events, false);
    removeDanglingEvents(dom, true);
}

рд╕рднреА 37 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрддреЗ рдФрд░ рдЗрд╕ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдЪрд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдЧреБрдо рд╣реИред рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдЙрджрд╛рд╣рд░рдг рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛: http://playground-leaflet.rhcloud.com/rezop/edit?html ,output

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗрдВред

@perliedman рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЙрд╕ рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред рдХреБрдЫ рдФрд░ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬрдмрдХрд┐ рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдХреБрдЫ рдкреНрд░рд╢реНрди -

рдпрджрд┐ рдореИрдВ map.remove() рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдкрд░рдд рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ, рдпрд╣ рдкрд░рдд рд╣рдЯрд╛рдиреЗ рдХрд╛ рднреА рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рддрд╣рдд map.remove() рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдк рдирд┐рд░реНрдорд╛рдг рдХреЗ рдареАрдХ рдмрд╛рдж рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдирд╖реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╣реА?

рдпрд╛рдж рд░рдЦреЗрдВ, рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, _use_ рд╕реЛрд░реНрд╕! :рд╡рд┐рдВрдХ: рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, _yes_, remove рдкрд░рддреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛: https://github.com/Leaflet/Leaflet/blob/master/src/map/Map.js#L731

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдерд╛ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдмрдирд╛рдирд╛ рдерд╛, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдЯрд╛рдЗрд▓ рдкрд░рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдб рдХреА рдЧрдИ рдЯрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рд╢реБрд░реВ рдХреА рдЧрдИ рдереА, рдЙрджрд╛рд╣рд░рдг remove рдХреЙрд▓ рдХреЛ рдбрд╛рд▓реЗ рдмрд┐рдирд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдХреГрддреНрд░рд┐рдо рдкрд░реАрдХреНрд╖рдг рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдирдорд╕реНрддреЗ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдореВрд▓ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ:

рдореИрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд░реЛрдз рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдкреГрд╖реНрдареЛрдВ/рд╕рддрд╣реЛрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд░реНрд╢рдХ рдШрдЯрдХ ( рдкрддреНрд░рдХ-рдЖрдИрдЖрдИрдЖрдИрдПрдл рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ)ред рдЬрдм рджрд░реНрд╢рдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдердВрдмрдиреЗрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ UI рдХреЗ рдордзреНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХреМрди рд╕рд╛ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреГрд╢реНрдп рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдирдП рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ map.remove() рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдирдпрд╛ рдирдХреНрд╢рд╛ рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ (рдПрдХ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ div) рдХреЗ рд╕рдорд╛рди DOM рддрддреНрд╡ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ DOM рдХреЛ рдХреИрдЯрд▓реЙрдЧ рдХреЗ рдмрд╛рд╣рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рджреГрд╢реНрдп рдореЗрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди map.remove() рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдПрдХ рдирдпрд╛ рджреГрд╢реНрдп рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдВрд╕реЛрд▓ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ: Cannot read property '_leaflet_pos' of undefined рдЬрдм рднреА рдирдХреНрд╢рд╛ рдЦреАрдВрдЪрд╛ рдпрд╛ рдЬрд╝реВрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреНрд░реЛрдо рдореЗрдВ рдЖрддреА рд╣реИ рд▓реЗрдХрд┐рди рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВред

@egardner рд╣рд╛рдБ, рдХреГрдкрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗ!

@egardner рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди (рдХреНрд░реЛрдорд┐рдпрдо + рдиреЛрдб) рдРрдк рдкрд░ рдареАрдХ рд╡реИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА, рдЬрд┐рд╕ рдкрд░ рдореБрдЭреЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рдкрдбрд╝рд╛:
"рдкрддреНрд░рдХ": "1.0.0",
"leaflet.markercluster": "1.0.0-rc.1.0"
рддреНрд░реБрдЯрд┐ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 1.2.0 рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рд╕рдВрдкрддреНрддрд┐ '_leaflet_pos' рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ
рдпрд╣ рдЙрд╕реА DOM рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдореИрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ map.remove() рдХреЗ рдмрд╛рдж рднреА рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рд╕рдордп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╢реЙрд░реНрдЯ рдЯрд░реНрдо рдкрд░ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдКрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреВрдВ

рд╣рдо рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд░рд╣рд╛ рд╣реИ

рдореИрдВрдиреЗ рдКрдкрд░ рдЬреЛ рдХрд╣рд╛ рд╣реИ рдЙрд╕реЗ рдореИрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛: рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдирдорд╕реНрддреЗред рдореИрдВрдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдПрдХ рдкрд╣реЗрд▓реА рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдпрджрд┐ рдЖрдк рдПрдХ div рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдХрд╛рд▓реЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрд╕реА div рдкрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рджреЛрдмрд╛рд░рд╛ рджреЛрд╣рд░рд╛рдПрдВ, рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдЪрд╛рд▓ рддрдм рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧреА
рдзреНрдпрд╛рди рдореЗрдВ рди рдЖрдпрд╛ рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рд╕рдВрдкрддреНрддрд┐ '_leaflet_pos' рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ред

рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, my fiddle рдЦреЛрд▓реЗрдВ, рдорд╛рдирдЪрд┐рддреНрд░ рдирд┐рдХрд╛рд▓реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рд╕реНрдерд╛рди рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
http://jsfiddle.net/spydmobile/5hmadjnk/

рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ Chorme рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, FF рдореЗрдВ рдирд╣реАрдВ

рд╣рд╛рдБ рд╕реНрдкрд╛рдИрдбрдореЛрдмрд╛рдЗрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реИ рдЬреЛ рдореИрдВ рдХреНрд░реЛрдо рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдерд╛

рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред invalidateSize рдХреЙрд▓ рдХреЗ рдХрд╛рд░рдг рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдкрд░ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИ:

Uncaught TypeError: Cannot read property '_leaflet_pos' of undefined
    at getPosition (leaflet-src.js:2765)
    at NewClass._getMapPanePos (leaflet-src.js:4378)
    at NewClass._rawPanBy (leaflet-src.js:4180)
    at NewClass.invalidateSize (leaflet-src.js:3509)
    at NewClass.<anonymous> (leaflet-src.js:4244)

рдкреВрд░реНрдг рдХреЙрд▓ рд╕реНрдЯреИрдХ _onResize рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИред рдореИрдВ react-leaflet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХрд╛ рдХреЛрдИ рднреА рд╣рд┐рд╕реНрд╕рд╛ рдЙрд╕ рдпрд╛ рд╕реНрдерд╛рдиреАрдп рдХреЛрдб рдХреЗ рдореБрджреНрджреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рдЬреИрд╕реЗ 1.0.3 рдФрд░ 1.2.0 ) рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рд╕реЛрдЪрдХрд░ рдХрд┐ рд╣рдо рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ 1.x.x рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓реЙрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ рдерд╛ред

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ? рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкрддреНрд░рдХ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдпрд╣рд╛рдБ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдирдХреНрд╢рд╛ рдирд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдбреЛрдо рддрддреНрд╡ рдореЗрдВ рдЕрднреА рднреА рдПрдХ _leaflet_events рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рд╕реЗ рднреА рдХреЛрдИ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдВрджрд░реНрдн рдкреБрд░рд╛рдирд╛ рд╣реИ (рд╣реИрдВрдбрд▓рд░ рдореЗрдВ _mapPane рдирд┐рдЬреА рд╕рдВрдкрддреНрддрд┐ рдЧреИрд░-рдореМрдЬреВрдж рддрддреНрд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ)ред

рдореИрдВ рднреА рдпрд╣ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЬрд╛ рд░рд╣реЗ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:

https://sentry.io/share/issue/b414c58ea85c44ee9e0e40ad0781883a/

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмреИрдХ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реЛрдЧрд╛:

рдорд╛рдирдЪрд┐рддреНрд░ рдХрдВрдЯреЗрдирд░ div рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рдИрд╡реЗрдВрдЯ рд╣реИрдВ рдЬреЛ map.off рдФрд░ map.remove рдмрд╛рдж рднреА рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдРрд╕реЗ рдЧреБрдг рд╣реИрдВ рдЬреЛ _leaflet_ рдФрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬреЛ рдореИрдВрдиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рд╣реА рд╕рдВрдкрддреНрддрд┐ "map._leaflet_events". рдкрд╛рдП рд╣реИрдВ

рд╡реЗ pointerdown , pointermove рд░реВрдк рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдРрд╕реЗ рд▓реЗрдХрд┐рди рдЧреБрдгреЛрдВ рдХреЗ рдирд╛рдо map._leaflet_touchstarttouchstart32 рдЖрджрд┐ рдЬреИрд╕реЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЙрдирдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ ( removeEventListener рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдЪреНрдЫреЗ рдЙрдкрд╛рдп рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ), рддреЛ рдореИрдВ рджреВрд╕рд░реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП div рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЗрд╕рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЬрд╛ рд░рд╣реЗ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рднреА рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред

рдореИрдВ рдпрд╣рд╛рдВ рдХреЛрдб рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк POINTER_DOWN рд▓рд┐рдП рдкрддреНрд░рдХ рд╕реНрд░реЛрдд рдЦреЛрдЬрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╕рдВрд▓рдЧреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдиреЗрдВрдЧреЗред

рдореИрдВ рдЗрд╕реЗ рдХреНрд░реЛрдо рдкрд░ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдПрдлрдПрдл рдореЗрдВ рднреА (рджреЛрдиреЛрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдФрд░ @spydmobile рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП jsfiddle рдХреЗ рд╕рд╛рде)

@FLoibl рд╢рд╛рдпрдж рдЬрд┐рд╕ рддрдХрдиреАрдХ рдХрд╛ рдЖрдк рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдФрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ

@spydmobile рдпрд╣рд╛рдБ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣реА рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ:
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рдПрдл * рдЖрдИрдПрдирдЬреА рдЯрд┐рдкреНрдкрдгреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдб рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред
рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЕрдм рд▓рдЧрднрдЧ 10 рдмрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ lol

function removeMap()
{
    var leafletCtrl = get_your_own_leaflet_reference_from_somewhere(), 
    dom = leafletCtrl.getReferenceToContainerDomSomehow(); 

    //This removes most of the events
    leafletCtrl.off();

//After this, the dom element should be good to reuse, unfortunatly it is not
    leafletCtrl.remove(); 

    var removeDanglingEvents = function(inputObj, checkPrefix)
    {
        if(inputObj !== null)
        {
            //Taken from the leaflet sourcecode directly, you can search for these constants and see how those events are attached, why they are never fully removed i don't know
            var msPointer = L.Browser.msPointer,
            POINTER_DOWN =   msPointer ? 'MSPointerDown'   : 'pointerdown',
            POINTER_MOVE =   msPointer ? 'MSPointerMove'   : 'pointermove',
            POINTER_UP =     msPointer ? 'MSPointerUp'     : 'pointerup',
            POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel';

            for(var prop in inputObj)
            {
                var prefixOk = checkPrefix ? prop.indexOf('_leaflet_') !== -1 : true, propVal; //if we are in the _leaflet_events state kill everything, else only stuff that contains the string '_leaflet_'
                if(inputObj.hasOwnProperty(prop) && prefixOk)
                {
                    //Map the names of the props to the events that were really attached => touchstart equals POINTER_DOWN etc
                    var evt = []; 
                    if(prop.indexOf('touchstart') !== -1) //indexOf because the prop names are really weird 'touchstarttouchstart36' etc
                    {
                        evt = [POINTER_DOWN];
                    }
                    else if(prop.indexOf('touchmove') !== -1)
                    {
                        evt = [POINTER_MOVE];
                    }
                    else if(prop.indexOf('touchend') !== -1)
                    {
                        evt = [POINTER_UP, POINTER_CANCEL];
                    }

                    propVal = inputObj[prop];
                    if(evt.length > 0 && typeof propVal === 'function')
                    {
                        evt.each(function(domEvent)
                        {
                            dom.removeEventListener(domEvent, propVal, false);
                        });                    
                    }

                    //Reference B-GONE, Garbage b collected.
                    inputObj[prop] = null;
                    delete inputObj[prop];
                }
            }
        }        
    };

    removeDanglingEvents(dom._leaflet_events, false);
    removeDanglingEvents(dom, true);
}

рдЖрд╣ рдЯреНрд░рд┐рдкрд▓ рдмреИрдХрдЯрд┐рдХреНрд╕, рд╕рдордЭ рдЧрдпрд╛, tyред

@FLoibl рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЬрд╛рдВрдЪ рд╣реИ: +1:

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдХреБрдЫ рд▓реЙрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ...? https://github.com/Leaflet/Leaflet/blob/5161140e952969c5da27751b79154a2c93f53bfa/src/dom/DomEvent.Pointer.js#L39 рдФрд░ https://github.com/Leaflet/Leaflet/blob/fe9e0f233388e8c02b9e7f рдЬреЗрдПрд╕#рдПрд▓133

рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЪрд▓рдирд╛ L.Map рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рдЙрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдЙрдиреНрд╣реЗрдВ рдбреЛрдо рдореЗрдВ "рдкреЙрдЗрдВрдЯрд░рдореЛрд╡" рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо "рдЯрдЪрд╕реНрдЯрд╛рд░реНрдЯ" рдЖрджрд┐ рд╣реИрдВред рд╕рд╛рде рд╣реА "рдЯрдЪрд╕реНрдЯрд╛рд░реНрдЯ" рд╢рдмреНрдж рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдореЗрдВ рджреЛ рдмрд╛рд░ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдбрдм рдХреЙрдиреНрд╕реИрдЯ рдЖрдИрдбреА рдФрд░ рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо?

рдХреНрдпрд╛ рдЙрди "рд╕реВрдЪрдХ" рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдмрд┐рдирд╛ рдЯрдЪрд╕реНрдХреНрд░реАрди рдФрд░ рдХреНрд░реЛрдо рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддреНрд░рдХ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рдордХрд╛рдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ :-(

рдореИрдВ рдЙрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реА рдХреМрди рд╕реА рдШрдЯрдирд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП removePointerListener рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдпрд╛ рд╡рд╣рд╛рдВ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реЛрдВред

рдХреНрдпрд╛ рдЙрди "рд╕реВрдЪрдХ" рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдмрд┐рдирд╛ рдЯрдЪрд╕реНрдХреНрд░реАрди рдФрд░ рдХреНрд░реЛрдо рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рд╛рдВред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЯрдЪрд╕реНрдХреНрд░реАрди рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреЙрдЗрдВрдЯрд░ рдИрд╡реЗрдВрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддреНрд░рдХ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рдордХрд╛рдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ :-(

рдЕрд░реЗ, рдирд┐рд░рд╛рд╢ рдордд рд╣реЛ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЬрд╛рдВрдЪ рдХрд╛рд░реНрдп рд╣реИ! :рдореБрд╕реНрдХреБрд░рд╛рдУ:

рдпрд╣ рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг 1.0.3 рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ @spydmobile jsfiddle рдХреЛ рдЙрдард╛рдпрд╛ рдФрд░ рд▓реАрдлрд▓реЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛ рдЧрдИ http://jsfiddle.net/5hmadjnk/47/ ред рд╕рдВрд╕реНрдХрд░рдг 1.1.0 рдХреЗ рд╕рд╛рде рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред

@ benru89 рдпрд╣ рдмрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 1.0.3 рдореЗрдВ https://github.com/Leaflet/Leaflet/issues/5263 рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рдерд╛ (рдЬреНрдпрд╛рджрд╛рддрд░ https://github.com/Leaflet/Leaflet/pull/ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛) 5265)ред

1.0.3 рд╕реЗ 1.1.0 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдиреЗ рдЕрдм рдмрд╣рд┐рд╖реНрдХреГрдд L.Mixin.Events рдФрд░ рд░реЛрд▓рдЕрдкрдЬреЗрдПрд╕ рдмрд┐рд▓реНрдб рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ git bisect рд╕рд╛рде рднреА рдирд╣реАрдВред

@IvanSanchez I рдиреЗ 1.0.3 рдФрд░ 1.1.0 рдореЗрдВ рд╣рдЯрд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХреА рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:

for (i in this._panes) {
    remove(this._panes[i]);
}
this._layers = [];
this._panes = [];
delete this._mapPane;
delete this._renderer;

рдЕрдЧрд░ рдореИрдВ 6 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рд╡рд╣ рдЬреЛ рдореИрдкрдкреЗрди рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рднрд╛рд╡ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдкрдкреЗрди рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдмрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

@ benru89 рд╡рд╛рд╣, рдпрд╣ рднреА рдЕрдЪреНрдЫреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ: +1:

рдореИрдВ рдЕрднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдкреИрди рдореЗрдВ рдЕрднреА рдХреМрди рд╕реЗ рдкреЙрдЗрдВрдЯрд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐: рд╕реЛрдЪ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдлрд▓рдХ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рдХрд░, рдЖрдк рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдореБрдЦреМрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рдореИрдВрдиреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛, рддреЛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдХреБрдЫ _mapPane рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдирд╖реНрдЯ рдХрд┐рдП рдЧрдП рдбреЛрдо рддрддреНрд╡ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣реЗ рдереЗ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реЗ рдХреИрд╢реНрдб рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗред рдпрджрд┐ рдлрд▓рдХ рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рднреВрдд рдХреА рдШрдЯрдирд╛рдПрдВ рдЕрдкрд╡рд╛рдж рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

@Floibl рдореИрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ @spydmobile ) рдХреЛ "рдЯрдЪрдПрдХреНрд╕рдЯреЗрдВрдб" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдкрддреНрд░рдХ рд╣реИред рдбреНрд░рд╛ рд╣реИрдВрдбрд▓рд░ред рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд▓реАрдлрд▓реЗрдЯ.рдбреНрд░рд╛ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдЕрдкрд╡рд╛рдж рднреА рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдПрдХ рдФрд░ рдЙрдкрд╛рдп рдорд┐рд▓рд╛ред рдЧреИрд░-рджрд╕реНрддрд╛рд╡реЗрдЬ рд╡рд┐рдХрд▓реНрдк touchExtend : false рд╕рд╛рде рдЕрдкрдиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдФрд░ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдореИрдВ рдХрд┐рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЦреЛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рдпрд╛ рдЯрдЪ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЗрд╢рд╛рд░реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ?? рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реЗ рдРрдк рдореЗрдВ рд╕рдмрдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

@IvanSanchez рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЬрдм рдЖрдк рдЬрд╝реВрдо рдРрдирд┐рдореЗрд╢рди рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реЛрдиреЗ рдкрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдирд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ: Uncaught TypeError: Cannot read property '_leaflet_pos' of undefined ред

рдореИрдВрдиреЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ Map._animateZoom() рдЕрдВрджрд░ рдПрдХ рд▓рд╛рдЗрди рд╣реИ: setTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);
рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдирдХреНрд╢рд╛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди Map._onZoomTransitionEnd рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХрд╛ _"рдпрд╣рд╛рдВ рдпрд╛ рд╡рд╣рд╛рдВ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЧреБрдо"_ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рд╕рд░рд▓реАрдХреГрдд рдХреЙрд▓ рдЯреНрд░реА this._onZoomTransitionEnd -> this._move -> this._getNewPixelOrigin -> this._getMapPanePos -> getPosition(this._mapPane) -> return el._leaflet_pos рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ this._mapPane _undefined_ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдпрджрд┐ рдЖрдк this._move рдФрд░ this._moveEnd рдХреЙрд▓ рдХреЛ if (this._mapPane) {} рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдЗрд╕реЗ рдмрджрд▓реЗрдВ:

_onZoomTransitionEnd: function () {
    if (!this._animatingZoom) { return; }

    if (this._mapPane) {
        removeClass(this._mapPane, 'leaflet-zoom-anim');
    }

    this._animatingZoom = false;

    this._move(this._animateToCenter, this._animateToZoom);

    // This anim frame should prevent an obscure iOS webkit tile loading race condition.
    requestAnimFrame(function () {
        this._moveEnd(true);
    }, this);
}

рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА:

_onZoomTransitionEnd: function () {
    if (!this._animatingZoom) { return; }

    this._animatingZoom = false;

    if (this._mapPane) {
        removeClass(this._mapPane, 'leaflet-zoom-anim');
        this._move(this._animateToCenter, this._animateToZoom);

        // This anim frame should prevent an obscure iOS webkit tile loading race condition.
        requestAnimFrame(function () {
            this._moveEnd(true);
        }, this);
    }
}

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред touchExtend : false рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдореИрдВ рджреГрд╢реНрдп рд╕реЗ рджреВрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдкрд╛рд╕ рдирдХреНрд╢рд╛ рд╣реИ (рдЗрд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ map.remove() рдкрд░ рдХреЙрд▓ рдХрд░рдХреЗ рдирд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдлрд┐рд░ рдореИрдВ рдЗрд╕ рджреГрд╢реНрдп рдкрд░ рд╡рд╛рдкрд╕ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕реЗ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдирд╛ рдФрд░ рдЖрд░рдВрдн рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ setMaxBounds рд╡рд┐рдзрд┐ рдореЗрдВ getPosition рдкрд░ '_leaflet_pos' рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:

Uncaught (in promise) TypeError: Cannot read property '_leaflet_pos' of undefined
    at getPosition (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:2445)
    at NewClass._getMapPanePos (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:4409)
    at NewClass._moved (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:4413)
    at NewClass.getCenter (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:3774)
    at NewClass.panInsideBounds (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:3488)
    at NewClass._panInsideMaxBounds (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:4220)
    at NewClass.setMaxBounds (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:3444)

рдФрд░ setView рд╡рд┐рдзрд┐ рдореЗрдВ рднреА:

Uncaught (in promise) TypeError: Cannot read property '_leaflet_pos' of undefined at getPosition (leaflet-src.js?9eb7:2445) at NewClass._getMapPanePos (leaflet-src.js?9eb7:4409) at NewClass.containerPointToLayerPoint (leaflet-src.js?9eb7:3989) at NewClass._getCenterLayerPoint (leaflet-src.js?9eb7:4446) at NewClass._getCenterOffset (leaflet-src.js?9eb7:4451) at NewClass._tryAnimatedPan (leaflet-src.js?9eb7:4526) at NewClass.setView (leaflet-src.js?9eb7:3181)

Map.remove () рдХреЗ рдмрд╛рдж рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛, рдореЗрд░реЗ рдирдХреНрд╢реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдпрд╣ рд╕рдЯреАрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

v1.6.0 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ред рдпрд╣ рдПрдХ рдЬрдЯрд┐рд▓ рдореБрджреНрджрд╛ рд╣реИ

рдпрд╣рд╛рдВ рдПрдХ рдПрд╕рдПрд╕рд╕реАрд╕реАрдИ рд╣реИ: https://jsfiddle.net/0oafw694/1/

рдореВрд▓ рд░реВрдк рд╕реЗ, рдирд┐рдореНрди рдХреЛрдб рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ ...

map = L.map('map');
map.setView(...);
map.setMaxBounds(...);
map.remove();

... рджреЛ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ:

moveend: (1) [тАж]
0: Object { fn: _panInsideMaxBounds(), ctx: undefined } // from setMaxBounds

unload: (2) [тАж]
0: Object { fn: _destroy() , ctx: {тАж} }
1: Object { fn: _destroyAnimProxy(), ctx: undefined }

zoomanim: (1) [тАж]
0: Object { fn: _createAnimProxy(), ctx: undefined }

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, zoomanim/_createAnimProxy рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ unload/_destroyAnimProxy , рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди moveend/_panInsideMaxBounds рдХреЛ рдЕрдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдкреАрдЖрд░ рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛ тАж

рдореИрдВрдиреЗ рдЕрднреА рдЙрд╕ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ div рдмрдирд╛рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдЖрдИрдбреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдореБрдЭреЗ div рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реНрдореГрддрд┐ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХреБрдЫ рдШрдЯрдирд╛рдПрдВ рдЕрднреА рднреА рдЪрд▓ рд░рд╣реА рд╣реИрдВ) рдФрд░ рдлрд┐рд░ рдПрдХ рдЕрд▓рдЧ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде div рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛ рд╕рдХреВрдВред

рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдЖрдИрдбреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдирдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рд╕рднреА рдЧрддрд┐рд╢реАрд▓ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде)

рдкрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреЛ рднреА рдШрдЯрдирд╛рдПрдБ (рдЙрджрд╛ред рдореВрд╡реЗрдВрдб, рдореВрд╡рд╕реНрдЯрд╛рд░реНрдЯ, рдЖрджрд┐) рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╣реЗрд░рдлреЗрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЙрдирдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИрдВ рдФрд░ рдбреЛрдо рд╕реЗ рд▓реАрдлрд▓реЗрдЯ рдХреЛ рдЙрддрд╛рд░рддреЗ рд╕рдордп рд╕реНрдореГрддрд┐ рдореЗрдВ рд░рд╣рддреА рд╣реИрдВред
рдореИрдВрдиреЗ рдпрд╣ рдХрд┐рдпрд╛ рдерд╛: @moveend="()=>{enableRecenter = true}" рдФрд░ рдЗрд╕рд▓рд┐рдП, рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдЙрддрд╛рд░рдиреЗ/рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди 'рдореВрд╡реЗрдВрдб' рдХрд╛ рд╣реИрдВрдбрд▓рд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрдирд╛ рд░рд╣рд╛ред
рдореИрдВрдиреЗ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЬреЛрдбрд╝рддреЛрдбрд╝ (рдореЗрд░реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдШрдЯрдХ рд╕реЗ рд╣реА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЕрдм рдпрд╣ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрдирд╛ рдмрдВрдж рд╣реЛ рдЧрдИред

рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрднреА рднреА рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ !!! рдмреЗрд╢рдХ, рдЬрдм рддрдХ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рдФрд░ рдЗрд╕ рдмрдЧ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

edmsgists picture edmsgists  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gdbd picture gdbd  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

viswaug picture viswaug  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

piehei picture piehei  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

walterfn2 picture walterfn2  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ