派生自 wuyushui/SewerAndRainNetwork

chenzeping
2021-03-10 b85b0e9ea957fac745b9e7350cb0315578abef85
src/components/plugin/PathDashFlow.js
@@ -1,7 +1,5 @@
// @class PolyLine
import * as L from 'leaflet'
const DashFlow = () => {
const L = window.L
  L.Path.mergeOptions({
    // @option dashSpeed: Number
    // The speed of the dash array, in pixels per second
@@ -35,9 +33,65 @@
      this._lastDashFrame = performance.now()
      this._dashFrame = L.Util.requestAnimFrame(this._onDashFrame.bind(this))
    }
  },
  _offDashFrame: function () {
    L.Util.cancelAnimFrame(this._dashFrame)
  },
  onRemove: function () {
    this._renderer._removePath(this)
    this._offDashFrame()
  }
  })
// 针对Canvas添加dashOffset参数,解决Canvas下无法实现动态线问题
L.Canvas.include({
  _updateDashArray: function (layer) {
    if (typeof layer.options.dashArray === 'string') {
      var parts = layer.options.dashArray.split(/[, ]+/)
      var dashArray = []
      var dashValue
      var i
      for (i = 0; i < parts.length; i++) {
        dashValue = Number(parts[i])
        // Ignore dash array containing invalid lengths
        if (isNaN(dashValue)) {
          return
        }
        dashArray.push(dashValue)
      }
      layer.options._dashArray = dashArray
    } else {
      layer.options._dashArray = layer.options.dashArray
}
export default { DashFlow }
    if (layer.options.dashOffset) {
      layer.options._dashOffset = layer.options.dashOffset
    }
  },
  _fillStroke: function (ctx, layer) {
    var options = layer.options
    if (options.fill) {
      ctx.globalAlpha = options.fillOpacity
      ctx.fillStyle = options.fillColor || options.color
      ctx.fill(options.fillRule || 'evenodd')
    }
    if (options.stroke && options.weight !== 0) {
      if (ctx.setLineDash) {
        ctx.setLineDash((layer.options && layer.options._dashArray) || [])
      }
      if (layer.options._dashOffset) {
        ctx.lineDashOffset = layer.options._dashOffset
      }
      ctx.globalAlpha = options.opacity
      ctx.lineWidth = options.weight
      ctx.strokeStyle = options.color
      ctx.lineCap = options.lineCap
      ctx.lineJoin = options.lineJoin
      ctx.stroke()
    }
  }
})