From 1820aef3fb5c926664de1d4d484f64a5c9ba7099 Mon Sep 17 00:00:00 2001 From: YANGDL <114714267@qq.com> Date: 星期二, 05 一月 2021 17:06:08 +0800 Subject: [PATCH] 优化逻辑 --- src/components/plugin/PathDrag.js | 262 ++++++++++++++++++++++++++-------------------------- 1 files changed, 131 insertions(+), 131 deletions(-) diff --git a/src/components/plugin/PathDrag.js b/src/components/plugin/PathDrag.js index c4f2eea..88998a5 100644 --- a/src/components/plugin/PathDrag.js +++ b/src/components/plugin/PathDrag.js @@ -1,143 +1,143 @@ 'use strict' const init = (L) => { - /* A Draggable that does not update the element position + /* A Draggable that does not update the element position and takes care of only bubbling to targetted path in Canvas mode. */ - L.PathDraggable = L.Draggable.extend({ + L.PathDraggable = L.Draggable.extend({ - initialize: function(path) { - this._path = path - this._canvas = (path._map.getRenderer(path) instanceof L.Canvas) - let element = this._canvas ? this._path._map.getRenderer(this._path)._container : this._path._path - L.Draggable.prototype.initialize.call(this, element, element, true) - }, + initialize: function (path) { + this._path = path + this._canvas = (path._map.getRenderer(path) instanceof L.Canvas) + const element = this._canvas ? this._path._map.getRenderer(this._path)._container : this._path._path + L.Draggable.prototype.initialize.call(this, element, element, true) + }, - _updatePosition: function() { - let e = { originalEvent: this._lastEvent } - this.fire('drag', e) - }, + _updatePosition: function () { + const e = { originalEvent: this._lastEvent } + this.fire('drag', e) + }, - _onDown: function(e) { - let first = e.touches ? e.touches[0] : e - this._startPoint = new L.Point(first.clientX, first.clientY) - if (this._canvas && !this._path._containsPoint(this._path._map.mouseEventToLayerPoint(first))) { - return - } - L.Draggable.prototype._onDown.call(this, e) + _onDown: function (e) { + const first = e.touches ? e.touches[0] : e + this._startPoint = new L.Point(first.clientX, first.clientY) + if (this._canvas && !this._path._containsPoint(this._path._map.mouseEventToLayerPoint(first))) { + return + } + L.Draggable.prototype._onDown.call(this, e) + } + + }) + + L.Handler.PathDrag = L.Handler.extend({ + + initialize: function (path) { + this._path = path + }, + + getEvents: function () { + return { + dragstart: this._onDragStart, + drag: this._onDrag, + dragend: this._onDragEnd + } + }, + + addHooks: function () { + if (!this._draggable) { + this._draggable = new L.PathDraggable(this._path) + } + this._draggable.on(this.getEvents(), this).enable() + L.DomUtil.addClass(this._draggable._element, 'leaflet-path-draggable') + }, + + removeHooks: function () { + this._draggable.off(this.getEvents(), this).disable() + L.DomUtil.removeClass(this._draggable._element, 'leaflet-path-draggable') + }, + + moved: function () { + return this._draggable && this._draggable._moved + }, + + _onDragStart: function () { + this._startPoint = this._draggable._startPoint + this._path + .closePopup() + .fire('movestart') + .fire('dragstart') + }, + + _onDrag: function (e) { + const path = this._path + const event = (e.originalEvent.touches && e.originalEvent.touches.length === 1 ? e.originalEvent.touches[0] : e.originalEvent) + const newPoint = L.point(event.clientX, event.clientY) + const latlng = path._map.layerPointToLatLng(newPoint) + + this._offset = newPoint.subtract(this._startPoint) + this._startPoint = newPoint + + this._path.eachLatLng(this.updateLatLng, this) + path.redraw() + + e.latlng = latlng + e.offset = this._offset + path.fire('drag', e) + e.latlng = this._path.getCenter ? this._path.getCenter() : this._path.getLatLng() + path.fire('move', e) + }, + + _onDragEnd: function (e) { + if (this._path._bounds) this.resetBounds() + this._path.fire('moveend') + .fire('dragend', e) + }, + + latLngToLayerPoint: function (latlng) { + // Same as map.latLngToLayerPoint, but without the round(). + const projectedPoint = this._path._map.project(L.latLng(latlng)) + return projectedPoint._subtract(this._path._map.getPixelOrigin()) + }, + + updateLatLng: function (latlng) { + const oldPoint = this.latLngToLayerPoint(latlng) + oldPoint._add(this._offset) + const newLatLng = this._path._map.layerPointToLatLng(oldPoint) + latlng.lat = newLatLng.lat + latlng.lng = newLatLng.lng + }, + + resetBounds: function () { + this._path._bounds = new L.LatLngBounds() + this._path.eachLatLng(function (latlng) { + this._bounds.extend(latlng) + }) + } + + }) + + L.Path.include({ + + eachLatLng: function (callback, context) { + context = context || this + const loop = function (latlngs) { + for (let i = 0; i < latlngs.length; i++) { + if (L.Util.isArray(latlngs[i])) loop(latlngs[i]) + else callback.call(context, latlngs[i]) } + } + loop(this.getLatLngs ? this.getLatLngs() : [this.getLatLng()]) + } - }) + }) - L.Handler.PathDrag = L.Handler.extend({ - - initialize: function(path) { - this._path = path - }, - - getEvents: function() { - return { - dragstart: this._onDragStart, - drag: this._onDrag, - dragend: this._onDragEnd - } - }, - - addHooks: function() { - if (!this._draggable) { - this._draggable = new L.PathDraggable(this._path) - } - this._draggable.on(this.getEvents(), this).enable() - L.DomUtil.addClass(this._draggable._element, 'leaflet-path-draggable') - }, - - removeHooks: function() { - this._draggable.off(this.getEvents(), this).disable() - L.DomUtil.removeClass(this._draggable._element, 'leaflet-path-draggable') - }, - - moved: function() { - return this._draggable && this._draggable._moved - }, - - _onDragStart: function() { - this._startPoint = this._draggable._startPoint - this._path - .closePopup() - .fire('movestart') - .fire('dragstart') - }, - - _onDrag: function(e) { - let path = this._path - let event = (e.originalEvent.touches && e.originalEvent.touches.length === 1 ? e.originalEvent.touches[0] : e.originalEvent) - let newPoint = L.point(event.clientX, event.clientY) - let latlng = path._map.layerPointToLatLng(newPoint) - - this._offset = newPoint.subtract(this._startPoint) - this._startPoint = newPoint - - this._path.eachLatLng(this.updateLatLng, this) - path.redraw() - - e.latlng = latlng - e.offset = this._offset - path.fire('drag', e) - e.latlng = this._path.getCenter ? this._path.getCenter() : this._path.getLatLng() - path.fire('move', e) - }, - - _onDragEnd: function(e) { - if (this._path._bounds) this.resetBounds() - this._path.fire('moveend') - .fire('dragend', e) - }, - - latLngToLayerPoint: function(latlng) { - // Same as map.latLngToLayerPoint, but without the round(). - let projectedPoint = this._path._map.project(L.latLng(latlng)) - return projectedPoint._subtract(this._path._map.getPixelOrigin()) - }, - - updateLatLng: function(latlng) { - let oldPoint = this.latLngToLayerPoint(latlng) - oldPoint._add(this._offset) - let newLatLng = this._path._map.layerPointToLatLng(oldPoint) - latlng.lat = newLatLng.lat - latlng.lng = newLatLng.lng - }, - - resetBounds: function() { - this._path._bounds = new L.LatLngBounds() - this._path.eachLatLng(function(latlng) { - this._bounds.extend(latlng) - }) - } - - }) - - L.Path.include({ - - eachLatLng: function(callback, context) { - context = context || this - let loop = function(latlngs) { - for (let i = 0; i < latlngs.length; i++) { - if (L.Util.isArray(latlngs[i])) loop(latlngs[i]) - else callback.call(context, latlngs[i]) - } - } - loop(this.getLatLngs ? this.getLatLngs() : [this.getLatLng()]) - } - - }) - - L.Path.addInitHook(function() { - this.dragging = new L.Handler.PathDrag(this) - if (this.options.draggable) { - this.once('add', function() { - this.dragging.enable() - }) - } - }) + L.Path.addInitHook(function () { + this.dragging = new L.Handler.PathDrag(this) + if (this.options.draggable) { + this.once('add', function () { + this.dragging.enable() + }) + } + }) } export default { - init + init } -- Gitblit v1.8.0