/* eslint-disable */
|
// Adds a fade-out animation to grid layers when they're removed from the map
|
|
(function () {
|
var gridProto = L.GridLayer.prototype
|
var onRemoveProto = gridProto.onRemove
|
var onAddProto = gridProto.onAdd
|
var fadeDuration = 200
|
|
L.GridLayer.include({
|
|
onAdd: function (map) {
|
if (this._fadeOutTime) {
|
var now = performance.now() || (+new Date())
|
L.Util.cancelAnimFrame(this._fadeOutFrame)
|
this._fadeOutTime = now + fadeDuration - this._fadeOutTime + now
|
L.Util.requestAnimFrame(this._fadeIn, this)
|
} else {
|
onAddProto.call(this, map)
|
}
|
},
|
|
onRemove: function (map) {
|
if (this._fadeOutTime) {
|
// We're removing this *again* quickly after removing and re-adding
|
var now = performance.now() || (+new Date())
|
|
this._fadeOutTime = now + fadeDuration - this._fadeOutTime + now
|
}
|
this._fadeOutTime = (performance.now() || (+new Date())) + fadeDuration * 2
|
this._fadeOutMap = this._map
|
|
L.Util.requestAnimFrame(this._fadeOut, this)
|
},
|
|
_fadeOut: function () {
|
if (!this._fadeOutTime || !this._container) { return }
|
|
var now = performance.now() || (+new Date())
|
|
var opacity = Math.min((this._fadeOutTime - now) / fadeDuration, 1)
|
// console.log('fadeout:', opacity);
|
if (opacity < 0) {
|
this._fadeOutTime = false
|
|
onRemoveProto.call(this, this._fadeOutMap)
|
|
return
|
}
|
|
L.DomUtil.setOpacity(this._container, opacity * this.options.opacity)
|
|
this._fadeOutFrame = L.Util.requestAnimFrame(this._fadeOut, this)
|
},
|
|
// Only runs when the gridlayer is quickly re-added while it's being faded out
|
_fadeIn: function _fadeIn () {
|
if (!this._fadeOutTime || !this._container) { return }
|
|
var now = performance.now() || (+new Date())
|
|
var opacity = (now - this._fadeOutTime) / fadeDuration
|
// console.log('fadein:', opacity);
|
|
if (opacity > 1) {
|
this._fadeOutTime = false
|
return
|
}
|
|
L.DomUtil.setOpacity(this._container, opacity * this.options.opacity)
|
|
L.Util.requestAnimFrame(this._fadeIn, this)
|
}
|
|
})
|
})()
|