UNPKG

leaflet

Version:

JavaScript library for mobile-friendly interactive maps

74 lines (59 loc) 1.5 kB
/* * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable. */ L.Handler.MarkerDrag = L.Handler.extend({ initialize: function (marker) { this._marker = marker; }, addHooks: function () { var icon = this._marker._icon; if (!this._draggable) { this._draggable = new L.Draggable(icon, icon, true); } this._draggable.on({ dragstart: this._onDragStart, drag: this._onDrag, dragend: this._onDragEnd }, this).enable(); L.DomUtil.addClass(icon, 'leaflet-marker-draggable'); }, removeHooks: function () { this._draggable.off({ dragstart: this._onDragStart, drag: this._onDrag, dragend: this._onDragEnd }, this).disable(); if (this._marker._icon) { L.DomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable'); } }, moved: function () { return this._draggable && this._draggable._moved; }, _onDragStart: function () { this._marker .closePopup() .fire('movestart') .fire('dragstart'); }, _onDrag: function (e) { var marker = this._marker, shadow = marker._shadow, iconPos = L.DomUtil.getPosition(marker._icon), latlng = marker._map.layerPointToLatLng(iconPos); // update shadow position if (shadow) { L.DomUtil.setPosition(shadow, iconPos); } marker._latlng = latlng; e.latlng = latlng; marker .fire('move', e) .fire('drag', e); }, _onDragEnd: function (e) { this._marker .fire('moveend') .fire('dragend', e); } });