// @class PolyLine
|
const L = window.L
|
L.Path.mergeOptions({
|
// @option dashSpeed: Number
|
// The speed of the dash array, in pixels per second
|
dashSpeed: 0
|
})
|
|
var _originalBeforeAdd = L.Path.prototype.beforeAdd
|
|
L.Path.include({
|
|
beforeAdd: function (map) {
|
_originalBeforeAdd.bind(this)(map)
|
|
if (this.options.dashSpeed) {
|
this._lastDashFrame = performance.now()
|
this._dashFrame = L.Util.requestAnimFrame(this._onDashFrame.bind(this))
|
}
|
},
|
|
_onDashFrame: function () {
|
if (!this._renderer) {
|
return
|
}
|
|
var now = performance.now()
|
var dashOffsetDelta = (now - this._lastDashFrame) * this.options.dashSpeed / 1000
|
|
this.options.dashOffset = Number(this.options.dashOffset || 0) + dashOffsetDelta
|
this._renderer._updateStyle(this)
|
|
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
|
}
|
|
if (layer.options.dashOffset) {
|
layer.options._dashOffset = layer.options.dashOffset
|
}
|
},
|
_fillStroke: function (ctx, layer) {
|
debugger
|
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()
|
}
|
}
|
})
|