diff --git a/README.md b/README.md index 89fec56..2cbde7c 100644 --- a/README.md +++ b/README.md @@ -123,9 +123,14 @@ myAnimation.resume(); ``` **Set**
-*set path* - sets path position, second param accepts a number between 0 - 1; +*set path* - set options after initialisation ```js -myAnimation.set(num); +// progress - sets path position, second param accepts a number between 0 - 1 +myAnimation.set('progress', value); + +// delay - sets initial delay +myAnimation.set('delay', value); + ``` **Get**
diff --git a/examples/basic.html b/examples/basic.html index c811e61..c7781e7 100644 --- a/examples/basic.html +++ b/examples/basic.html @@ -27,16 +27,33 @@ * Setup your Lazy Line element. * see README file for more settings */ + this.startTime = new Date(); + this.endTime = 0; let el = document.querySelector('#logo'); - let myAnimation = new LazyLinePainter(el, { - strokeWidth: 7, - delay: 500, - strokeCap :'round', - strokeColor : '#b5287b', - ease: 'easeInOutQuad' - }); - myAnimation.paint(); + let myAnimation = new LazyLinePainter(el, { + strokeWidth: 7, + //speedMultiplier: 0.5, + delay: 1000, + reverse: true, + strokeCap :'round', + strokeColor : '#b5287b', + ease: 'easeInOutQuad' + }); + + myAnimation.paint(); + + + myAnimation.on('start', () => { + var timeDiff = new Date() - this.startTime; // in ms + console.log('start :: ', timeDiff); + }) + myAnimation.on('update:logo-52', (data) => { + }) + myAnimation.on('complete', () => { + var timeDiff = new Date() - this.startTime; // in ms + console.log('complete :: ', timeDiff); + }) } } })(); @@ -47,7 +64,7 @@
- +
diff --git a/examples/callbacks.html b/examples/callbacks.html index 8b729a1..f5949ce 100644 --- a/examples/callbacks.html +++ b/examples/callbacks.html @@ -31,9 +31,8 @@ strokeWidth: 7, strokeCap :'round', strokeColor : '#b5287b', - ease: 'easeInOutQuad', - drawSequential: true, - delay: 1000 + //ease: 'easeInOutQuad', + //delay: 1000 }); diff --git a/examples/css/common.css b/examples/css/common.css index e00393f..4c530fb 100644 --- a/examples/css/common.css +++ b/examples/css/common.css @@ -13,11 +13,7 @@ body { * { box-sizing: border-box; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; } .content { @@ -25,8 +21,6 @@ body { top: 50%; left: 50%; width: 35%; - -ms-transform: translate(-50%,-50%); /* IE 9 */ - -webkit-transform: translate(-50%,-50%); /* Chrome, Safari, Opera */ transform: translate(-50%,-50%); } diff --git a/examples/get.html b/examples/get.html index 3256ad9..ed09ae9 100644 --- a/examples/get.html +++ b/examples/get.html @@ -75,7 +75,8 @@ strokeWidth: 8, strokeColor: '#b5287b', ease: 'easeInOutSine', - drawSequential: true + drawSequential: true, + delay: 1000 }); diff --git a/examples/set.html b/examples/set.html index 824b819..b1cbc12 100644 --- a/examples/set.html +++ b/examples/set.html @@ -47,8 +47,8 @@ function step(timestamp) { window.requestAnimationFrame(step); - position += (target - position) * friction; - myAnimation.set(position); + position += (target - position) * friction; + myAnimation.set('progress', position); } window.requestAnimationFrame(step); diff --git a/lib/lazy-line-painter-1.9.0.js b/lib/lazy-line-painter-1.9.0.js index d10eb4f..ab1106b 100644 --- a/lib/lazy-line-painter-1.9.0.js +++ b/lib/lazy-line-painter-1.9.0.js @@ -366,7 +366,9 @@ function () { progress: 0, longestDuration: 0, playhead: 0, - log: true + log: true, + offset: this.el.getBoundingClientRect(), + initialised: false }, config, {}); Object.assign(this, _events.default, {}); this.__raf = null; @@ -392,16 +394,9 @@ function () { this._parseDataAttrs(); - var totalDuration = this.config.delay + this._getTotalDuration(this.config.paths); + this._updateDuration(); - var longestDuration = this.config.delay + this._getLongestDuration(this.config.paths); - - this.config.totalDuration = this.config.drawSequential ? totalDuration : longestDuration; - this.config.totalDuration *= this.config.speedMultiplier; - - this._setupPaths(); - - this.resize(); + this._initialised = this._setupPaths(); } _createClass(LazyLinePainter, [{ @@ -436,16 +431,16 @@ function () { value: function paint() { var _this = this; - this.erase(); // begin animation + return this._initialised.then(function () { + _this.erase(); // begin animation + - this.__raf = requestAnimationFrame(function (timestamp) { - _this._paint(timestamp); - }); // fire onStart callback - // if (this.config.onStart !== null) { - // this.config.onStart(); - // } + _this.__raf = requestAnimationFrame(function (timestamp) { + _this._paint(timestamp); + }); // fire onStart callback - this.emit('start'); + _this.emit('start'); + }); } /** * pause @@ -529,12 +524,48 @@ function () { }, { key: "set", - value: function set(progress) { - // set elapsedTime + value: function set(prop, value) { + switch (prop) { + case 'progress': + this._setProgress(value); + + break; + + case 'delay': + this._setDelay(value); + + break; + + default: + if (this.config.log) { + console.log('property ' + prop + ' can not be set'); + } + + } + } + }, { + key: "_setProgress", + value: function _setProgress(progress) { this.config.progress = progress; this._updatePaths(); } + }, { + key: "_setDelay", + value: function _setDelay(delay) { + this.config.delay = delay; + + this._updateDuration(); + } + }, { + key: "_updateDuration", + value: function _updateDuration() { + this.config.totalDuration = this.config.drawSequential ? this._getTotalDuration() : this._getLongestDuration(); + this.config.totalDuration += this.config.delay; + console.log(this.config.totalDuration); + + this._calcPathDurations(); + } /** * get * @public @@ -572,8 +603,10 @@ function () { path.delay = Number(path.el.dataset.llpDelay) || 0; path.duration = Number(path.el.dataset.llpDuration) || 0; path.reverse = Number(path.el.dataset.llpReverse) || false; - path.ease = Number(path.el.dataset.llpEase) || null; - path.strokeDash = path.el.dataset.llpStrokeDash || null; + path.ease = Number(path.el.dataset.llpEase) || null; // path.strokeDash = path.el.dataset.llpStrokeDash || null; + + path.delay *= this.config.speedMultiplier; + path.duration *= this.config.speedMultiplier; this._setStyleAttrs(path); } @@ -613,40 +646,46 @@ function () { } }, { key: "_setupPaths", - value: function _setupPaths() { - var startTime = this.config.reverse ? this.config.totalDuration : 0; + value: function _setupPaths(resolve, reject) { + var _this3 = this; + + return new Promise(function (resolve, reject) { + for (var _i4 = 0; _i4 < _this3.config.paths.length; _i4++) { + var path = _this3.config.paths[_i4]; + path.index = _i4; + path.length = _this3._getPathLength(path.el); + path.positions = _this3._getPathPoints(path.el, path.length); + path.el.style.strokeDashoffset = path.length; + path.el.style.strokeDasharray = path.length; + path.onStrokeStartDone = false; + path.onStrokeCompleteDone = false; + } - for (var _i4 = 0; _i4 < this.config.paths.length; _i4++) { - var path = this.config.paths[_i4]; + resolve(); + }); + } + }, { + key: "_calcPathDurations", + value: function _calcPathDurations() { + var startTime = this.config.reverse ? this.config.totalDuration : this.config.delay; + + for (var _i5 = 0; _i5 < this.config.paths.length; _i5++) { + var path = this.config.paths[_i5]; path.progress = 0; - path.index = _i4; - path.length = this._getPathLength(path.el); - path.positions = this._getPathPoints(path.el, path.length); - path.el.style.strokeDasharray = this._getStrokeDashArray(path, path.length); - path.el.style.strokeDashoffset = path.length; - path.el.getBoundingClientRect(); - path.onStrokeStartDone = false; - path.onStrokeCompleteDone = false; - var startProgress = void 0; - var durationProgress = path.duration / this.config.totalDuration; if (this.config.reverse) { startTime -= path.duration; - startProgress = startTime / this.config.totalDuration; } else { if (this.config.drawSequential) { - startTime = this.config.playhead + this.config.delay; + startTime = 0; } else { - startTime = path.delay + this.config.delay; + startTime = path.delay; } - - startProgress = startTime / this.config.totalDuration; } path.startTime = startTime; - path.startProgress = startProgress; - path.durationProgress = durationProgress; - this.config.playhead += path.duration + path.delay; + path.startProgress = path.startTime / this.config.totalDuration; + path.durationProgress = path.duration / this.config.totalDuration; } } /** @@ -660,11 +699,11 @@ function () { }, { key: "adjustStartTime", value: function adjustStartTime(timestamp) { - var _this3 = this; + var _this4 = this; this.config.startTime = timestamp - this.config.elapsedTime; requestAnimationFrame(function (timestamp) { - _this3._paint(timestamp); + _this4._paint(timestamp); }); } /** @@ -679,7 +718,7 @@ function () { }, { key: "_paint", value: function _paint(timestamp) { - var _this4 = this; + var _this5 = this; if (!this.config) { return; @@ -699,7 +738,7 @@ function () { if (this.config.progress < 1) { this.__raf = requestAnimationFrame(function (timestamp) { - _this4._paint(timestamp); + _this5._paint(timestamp); }); } else { this.emit('complete'); @@ -708,12 +747,12 @@ function () { }, { key: "_updatePaths", value: function _updatePaths() { - for (var _i5 = 0; _i5 < this.config.paths.length; _i5++) { - var path = this.config.paths[_i5]; + for (var _i6 = 0; _i6 < this.config.paths.length; _i6++) { + var path = this.config.paths[_i6]; var elapsedProgress = this._getElapsedProgress(path); - path.progress = this._getProgress(1, 0, elapsedProgress, path.ease); + path.progress = this._getProgress(1, 0, elapsedProgress, path.ease, path); this._setLine(path); @@ -727,7 +766,7 @@ function () { value: function _getElapsedProgress(path) { var elapsedProgress; - if (this.config.progress > path.startProgress && this.config.progress < path.startProgress + path.durationProgress) { + if (this.config.progress >= path.startProgress && this.config.progress <= path.startProgress + path.durationProgress) { elapsedProgress = (this.config.progress - path.startProgress) / path.durationProgress; } else if (this.config.progress >= path.startProgress + path.durationProgress) { elapsedProgress = 1; @@ -739,7 +778,7 @@ function () { } }, { key: "_getProgress", - value: function _getProgress(duration, start, elapsed, ease) { + value: function _getProgress(duration, start, elapsed, ease, path) { var progress; if (elapsed > 0 && elapsed < duration) { @@ -806,26 +845,28 @@ function () { } }, { key: "_getTotalDuration", - value: function _getTotalDuration(paths) { + value: function _getTotalDuration() { var totalDuration = 0; + var paths = this.config.paths; - for (var _i6 = 0; _i6 < paths.length; _i6++) { - var pathDelay = paths[_i6].delay || 0; - totalDuration += paths[_i6].duration + pathDelay; + for (var _i7 = 0; _i7 < paths.length; _i7++) { + var pathDelay = paths[_i7].delay || 0; + totalDuration += paths[_i7].duration + pathDelay; } return totalDuration; } }, { key: "_getLongestDuration", - value: function _getLongestDuration(paths) { + value: function _getLongestDuration() { var longestDuration = 0; + var paths = this.config.paths; - for (var _i7 = 0; _i7 < paths.length; _i7++) { - var pathDelay = paths[_i7].delay || 0; + for (var _i8 = 0; _i8 < paths.length; _i8++) { + var pathTotalDuration = paths[_i8].delay + paths[_i8].duration; - if (paths[_i7].duration + pathDelay > longestDuration) { - longestDuration = paths[_i7].duration + pathDelay; + if (pathTotalDuration > longestDuration) { + longestDuration = pathTotalDuration; } } @@ -853,8 +894,8 @@ function () { value: function _getPathPoints(el, length) { var arr = []; - for (var _i8 = 0; _i8 < length; _i8++) { - var position = el.getPointAtLength(_i8); + for (var _i9 = 0; _i9 < length; _i9++) { + var position = el.getPointAtLength(_i9); arr.push({ x: position.x, y: position.y @@ -865,28 +906,12 @@ function () { return arr; } /** - * _getSVGElement - * Returns empty svg element with specified viewBox aspect ratio. + * _getStrokeDashArray * @private - * @param {string} viewBox - * @return {obj} jquery wrapped svg el */ - }, { - key: "_getSVGElement", - value: function _getSVGElement(viewBox) { - var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - svg.setAttributeNS(null, 'viewBox', viewBox); - svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); - return svg; - } }, { key: "_getStrokeDashArray", - - /** - * _getStrokeDashArray - * @private - */ value: function _getStrokeDashArray(path, length) { var strokeDash; @@ -915,15 +940,15 @@ function () { var strokeDashNum; var strokeDashRemainder; - for (var _i9 = strokeDashArray.length - 1; _i9 >= 0; _i9--) { - strokeDashTotal += Number(strokeDashArray[_i9]); + for (var _i10 = strokeDashArray.length - 1; _i10 >= 0; _i10--) { + strokeDashTotal += Number(strokeDashArray[_i10]); } ; strokeDashNum = Math.floor(length / strokeDashTotal); strokeDashRemainder = length - strokeDashNum * strokeDashTotal; - for (var _i10 = strokeDashNum - 1; _i10 >= 0; _i10--) { + for (var _i11 = strokeDashNum - 1; _i11 >= 0; _i11--) { strokeDashString += dashArray + ', '; } diff --git a/lib/lazy-line-painter-1.9.0.js.map b/lib/lazy-line-painter-1.9.0.js.map index e6ed037..faa8917 100644 --- a/lib/lazy-line-painter-1.9.0.js.map +++ b/lib/lazy-line-painter-1.9.0.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://lazy-line-painter/webpack/universalModuleDefinition","webpack://lazy-line-painter/webpack/bootstrap","webpack://lazy-line-painter/./src/easing.js","webpack://lazy-line-painter/./src/events.js","webpack://lazy-line-painter/./src/index.js"],"names":["Easing","easeLinear","t","b","c","d","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","Math","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBack","s","undefined","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","EventEmitter","on","name","callback","_eventEmitterCallbacks","push","addListener","off","i","indexOf","splice","removeListener","emit","evt","trigger","LazyLinePainter","el","config","Object","assign","paths","strokeWidth","strokeDash","strokeColor","strokeOverColor","strokeCap","strokeJoin","strokeOpacity","delay","ease","drawSequential","speedMultiplier","reverse","paused","progress","longestDuration","playhead","log","Events","__raf","composed","Boolean","dataset","llpComposed","querySelectorAll","uncomposed","length","className","classList","add","_parseDataAttrs","totalDuration","_getTotalDuration","_getLongestDuration","_setupPaths","resize","id","replace","llpId","llpDuration","llpDelay","console","erase","requestAnimationFrame","timestamp","_paint","cancelAnimationFrame","adjustStartTime","startTime","elapsedTime","onStrokeCompleteDone","path","style","strokeDashoffset","onStrokeStartDone","remove","_updatePaths","offset","getBoundingClientRect","positions","_getPathPoints","_updatePosition","Number","duration","llpReverse","llpEase","llpStrokeDash","_setStyleAttrs","llpStrokeColor","setAttributeNS","llpStrokeOpacity","llpStrokeWidth","llpStrokeCap","llpStrokeJoin","index","_getPathLength","strokeDasharray","_getStrokeDashArray","startProgress","durationProgress","_getProgress","elapsedProgress","_getElapsedProgress","_setLine","_updateStrokeCallbacks","start","elapsed","round","position","x","left","y","top","pathDelay","ceil","getTotalLength","arr","getPointAtLength","viewBox","svg","document","createElementNS","setAttribute","_getStrokeDashString","dashArray","strokeDashString","strokeDashArray","split","strokeDashTotal","strokeDashNum","strokeDashRemainder","floor","preArray","join","window"],"mappings":"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","file":"lazy-line-painter-1.9.0.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"lazy-line-painter\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"lazy-line-painter\"] = factory();\n\telse\n\t\troot[\"lazy-line-painter\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.js\");\n","\n/*\n *\n * TERMS OF USE - EASING EQUATIONS\n *\n * Open source under the BSD License.\n *\n * Copyright © 2001 Robert Penner\n * All rights reserved.\n *\n */\n\nlet Easing = {\n\n easeLinear(t, b, c, d) {\n return c * t / d + b;\n },\n\n easeInQuad(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n easeOutQuad(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n easeInOutQuad(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t + b;\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n },\n\n easeInCubic(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n\n easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n\n easeInOutCubic(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n },\n\n easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n\n easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n\n easeInOutQuart(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n },\n\n easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n\n easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n\n easeInOutQuint(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n },\n\n easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n\n easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n\n easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n\n easeInExpo(t, b, c, d) {\n return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n },\n\n easeOutExpo(t, b, c, d) {\n return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n\n easeInOutExpo(t, b, c, d) {\n if (t === 0) return b;\n if (t === d) return b + c;\n if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n },\n\n easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n\n easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n\n easeInOutCirc(t, b, c, d) {\n if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n\n easeInBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n\n easeOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n\n easeInOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n },\n\n easeInBounce(t, b, c, d) {\n return c - this.easeOutBounce(d - t, 0, c, d) + b;\n },\n\n easeOutBounce(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n } else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n } else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n }\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n\n },\n\n easeInOutBounce(t, b, c, d) {\n if (t < d / 2) return this.easeInBounce(t * 2, 0, c, d) * 0.5 + b;\n return this.easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n};\n\nexport default Easing;\n","let EventEmitter = {};\n\nEventEmitter.on = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n this._eventEmitterCallbacks[name] = this._eventEmitterCallbacks[name] || [];\n this._eventEmitterCallbacks[name].push(callback);\n};\nEventEmitter.addListener = EventEmitter.on;\n\nEventEmitter.off = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n const i = this._eventEmitterCallbacks[name].indexOf(callback);\n\n if (i < 0) return;\n this._eventEmitterCallbacks[name].splice(i, 1);\n};\nEventEmitter.removeListener = EventEmitter.off;\n\nEventEmitter.emit = function (name, evt) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n for (let callback of this._eventEmitterCallbacks[name]) {\n if (typeof callback !== 'function') return;\n callback(evt);\n }\n};\nEventEmitter.trigger = EventEmitter.emit;\n\nexport default EventEmitter;\n","/*\n * Lazy Line Painter\n * SVG Stroke animation.\n *\n * https://github.com/camoconnell/lazy-line-painter\n * http://www.camoconnell.com\n *\n * Copyright 2013-2018 Cam O'Connell\n * All rights reserved.\n *\n * Licensed under the MIT license.\n *\n */\n\nimport Events from './events';\nimport Easing from './easing';\n\nclass LazyLinePainter {\n\n /**\n * init\n * Responsible for caching user options,\n * @public\n * @param {object} opts user defined options\n */\n\n constructor(el, config) {\n\n this.el = el;\n this.config = Object.assign({\n\n paths: [],\n\n strokeWidth: null,\n strokeDash: null,\n strokeColor: null,\n strokeOverColor: null,\n strokeCap: null,\n strokeJoin: null,\n strokeOpacity: null,\n\n delay: 0,\n ease: null,\n drawSequential: false,\n speedMultiplier: 1,\n reverse: false,\n paused: false,\n progress: 0,\n\n longestDuration: 0,\n playhead: 0,\n log: true\n\n }, config, {});\n Object.assign(this, Events, {});\n\n this.__raf = null;\n\n let paths;\n let composed = Boolean(this.el.dataset.llpComposed);\n\n if (composed) {\n paths = this.el.querySelectorAll('[data-llp-id]');\n } else {\n paths = this.uncomposed();\n }\n\n let i;\n\n for (i = 0; i < paths.length; i++) {\n this.config.paths.push({\n el: paths[i]\n });\n }\n\n this.className = 'lazy-line-painter';\n this.el.classList.add(this.className);\n this._parseDataAttrs();\n let totalDuration = this.config.delay + this._getTotalDuration(this.config.paths);\n let longestDuration = this.config.delay + this._getLongestDuration(this.config.paths);\n\n this.config.totalDuration = this.config.drawSequential ? totalDuration : longestDuration;\n this.config.totalDuration *= this.config.speedMultiplier;\n this._setupPaths();\n\n this.resize();\n }\n\n uncomposed() {\n let paths = this.el.querySelectorAll('path, polygon, circle, ellipse, polyline, line, rect');\n let i;\n\n for (i = 0; i < paths.length; i++) {\n let id = this.el.id.replace(/ /g, '');\n\n id = id.replace('.', '');\n id = id.replace('-', '');\n paths[i].dataset.llpId = id + '-' + i;\n paths[i].dataset.llpDuration = 5000;\n paths[i].dataset.llpDelay = 0;\n }\n\n if(this.config.log){\n console.log('This lazy line is uncomposed! Visit http://lazylinepainter.info to compose your masterpiece!');\n }\n \n return paths;\n }\n\n /**\n * paint\n * Responsible for drawing path.\n * @public\n */\n paint() {\n\n this.erase();\n\n // begin animation\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n\n // fire onStart callback\n // if (this.config.onStart !== null) {\n // this.config.onStart();\n // }\n this.emit('start');\n }\n\n /**\n * pause\n * Responsible for pausing path animation.\n * @public\n */\n pause() {\n if (!this.config.paused) {\n this.config.paused = true;\n cancelAnimationFrame(this.__raf);\n }\n }\n\n /**\n * resume\n * Responsible for resuming path animation.\n * @public\n */\n resume() {\n if (this.config.paused) {\n requestAnimationFrame((timestamp) => {\n this.adjustStartTime(timestamp);\n });\n this.config.paused = false;\n }\n }\n\n /**\n * erase\n * Responsible for clearing path,\n * paint can still be called on the element after it has been erased.\n * @public\n */\n erase() {\n\n // reset / cancel rAF\n this.config.startTime = null;\n this.config.elapsedTime = null;\n cancelAnimationFrame(this.__raf);\n\n // reset callback\n this.config.onStrokeCompleteDone = false;\n\n // reset paused\n this.config.paused = false;\n\n // empty contents of svg\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.style.strokeDashoffset = path.length;\n path.onStrokeCompleteDone = false;\n path.onStrokeStartDone = false;\n }\n }\n\n /**\n * destroy\n * Responsible for removing lazyline data and element from DOM\n * @public\n */\n destroy() {\n\n // retrieve / remove data object\n this.config = null;\n\n // remove class\n this.el.classList.remove(this.className);\n\n // empty container element\n this.el.remove();\n this.el = null;\n\n }\n\n /**\n * set\n * @public\n */\n set(progress) {\n // set elapsedTime\n this.config.progress = progress;\n this._updatePaths();\n }\n\n /**\n * get\n * @public\n */\n get() {\n return this.config;\n }\n\n /**\n * resize\n * @public\n */\n resize() {\n\n this.config.offset = this.el.getBoundingClientRect();\n // this.config.scale = this.config.offset.width / this.config.width;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.getBoundingClientRect();\n path.positions = this._getPathPoints(path.el, path.length);\n this._updatePosition(path);\n }\n }\n\n _parseDataAttrs() {\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.id = path.el.dataset.llpId;\n path.delay = Number(path.el.dataset.llpDelay) || 0;\n path.duration = Number(path.el.dataset.llpDuration) || 0;\n path.reverse = Number(path.el.dataset.llpReverse) || false;\n path.ease = Number(path.el.dataset.llpEase) || null;\n path.strokeDash = path.el.dataset.llpStrokeDash || null;\n this._setStyleAttrs(path);\n }\n }\n\n _setStyleAttrs(path) {\n path.strokeColor = (path.el.dataset.llpStrokeColor || this.config.strokeColor);\n if (path.strokeColor) {\n path.el.setAttributeNS(null, 'stroke', path.strokeColor);\n }\n\n path.strokeOpacity = (path.el.dataset.llpStrokeOpacity || this.config.strokeOpacity);\n if (path.strokeOpacity) {\n path.el.setAttributeNS(null, 'stroke-opacity', path.strokeOpacity);\n }\n\n path.strokeWidth = (path.el.dataset.llpStrokeWidth || this.config.strokeWidth);\n if (path.strokeWidth) {\n path.el.setAttributeNS(null, 'stroke-width', path.strokeWidth);\n }\n\n path.strokeCap = (path.el.dataset.llpStrokeCap || this.config.strokeCap);\n if (path.strokeCap) {\n path.el.setAttributeNS(null, 'stroke-linecap', path.strokeCap);\n }\n\n path.strokeJoin = (path.el.dataset.llpStrokeJoin || this.config.strokeJoin);\n if (path.strokeJoin) {\n path.el.setAttributeNS(null, 'stroke-linejoin', path.strokeJoin);\n }\n }\n\n _setupPaths() {\n\n let startTime = this.config.reverse ? this.config.totalDuration : 0;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n\n let path = this.config.paths[i];\n\n path.progress = 0;\n path.index = i;\n path.length = this._getPathLength(path.el);\n path.positions = this._getPathPoints(path.el, path.length);\n\n path.el.style.strokeDasharray = this._getStrokeDashArray(path, path.length);\n path.el.style.strokeDashoffset = path.length;\n path.el.getBoundingClientRect();\n\n path.onStrokeStartDone = false;\n path.onStrokeCompleteDone = false;\n\n let startProgress;\n let durationProgress = path.duration / this.config.totalDuration;\n\n if (this.config.reverse) {\n startTime -= path.duration;\n startProgress = startTime / this.config.totalDuration;\n } else {\n if (this.config.drawSequential) {\n startTime = this.config.playhead + this.config.delay;\n } else {\n startTime = path.delay + this.config.delay;\n }\n startProgress = startTime / this.config.totalDuration;\n }\n\n path.startTime = startTime;\n path.startProgress = startProgress;\n path.durationProgress = durationProgress;\n this.config.playhead += (path.duration + path.delay);\n }\n }\n\n /**\n * adjustStartTime\n * Responsible for managing time.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n adjustStartTime(timestamp) {\n this.config.startTime = timestamp - this.config.elapsedTime;\n requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n }\n\n /**\n * _paint\n * Responsible for animating paths.\n * Path incrementation is performed using requestAnimationFrame.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n _paint(timestamp) {\n\n if (!this.config) {\n return;\n }\n\n // set startTime\n if (!this.config.startTime) {\n this.config.startTime = timestamp;\n }\n\n this.emit('update');\n\n // set elapsedTime\n this.config.elapsedTime = (timestamp - this.config.startTime);\n this.config.progress = this._getProgress(\n this.config.totalDuration,\n this.config.startTime,\n this.config.elapsedTime,\n this.config.ease\n );\n\n this._updatePaths();\n\n if (this.config.progress < 1) {\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n } else {\n this.emit('complete');\n }\n }\n\n _updatePaths() {\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n let elapsedProgress = this._getElapsedProgress(path);\n\n path.progress = this._getProgress(1, 0, elapsedProgress, path.ease);\n this._setLine(path);\n this._updatePosition(path);\n this._updateStrokeCallbacks(path);\n }\n }\n\n _getElapsedProgress(path) {\n\n let elapsedProgress;\n\n if (\n this.config.progress > path.startProgress &&\n this.config.progress < (path.startProgress + path.durationProgress)\n ) {\n elapsedProgress = (this.config.progress - path.startProgress) / path.durationProgress;\n } else if (this.config.progress >= (path.startProgress + path.durationProgress)) {\n elapsedProgress = 1;\n } else if (this.config.progress <= path.startProgress) {\n elapsedProgress = 0;\n }\n\n return elapsedProgress;\n }\n\n _getProgress(duration, start, elapsed, ease) {\n\n let progress;\n\n if (elapsed > 0 && elapsed < duration) {\n if (ease) {\n progress = Easing[ease](elapsed, 0, 1, duration);\n } else {\n progress = elapsed / duration;\n }\n } else if (elapsed >= duration) {\n progress = 1;\n } else if (elapsed <= start) {\n progress = 0;\n }\n\n return progress;\n }\n\n _setLine(path) {\n\n let el = path.el;\n let length = path.progress * path.length;\n\n if (this.config.reverse || path.reverse) {\n el.style.strokeDashoffset = -path.length + length;\n } else {\n el.style.strokeDashoffset = path.length - length;\n }\n }\n\n _updateStrokeCallbacks(path) {\n\n if (path.progress === 1) {\n\n if (!path.onStrokeCompleteDone) {\n path.onStrokeCompleteDone = true;\n\n this.emit('complete:' + path.id, path);\n this.emit('complete:all', path);\n }\n\n } else if (path.progress > 0.00001) {\n\n if (!path.onStrokeStartDone) {\n this.emit('start:' + path.id, path);\n this.emit('start:all', path);\n path.onStrokeStartDone = true;\n }\n\n this.emit('update:' + path.id, path);\n this.emit('update:all', path);\n }\n }\n\n /**\n * _updatePosition\n * Responsible for updating the paths x / y position.\n * @private\n */\n _updatePosition(path) {\n let index = Math.round((path.progress * (path.length - 1)));\n let position = path.positions[index];\n\n path.position = {\n x: this.config.offset.left + position.x,\n y: this.config.offset.top + position.y\n };\n }\n\n _getTotalDuration(paths) {\n let totalDuration = 0;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n totalDuration += (paths[i].duration + pathDelay);\n }\n\n return totalDuration;\n }\n\n _getLongestDuration(paths) {\n let longestDuration = 0;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n if ((paths[i].duration + pathDelay) > longestDuration) {\n longestDuration = (paths[i].duration + pathDelay);\n }\n }\n return longestDuration;\n };\n\n /**\n * _getPathLength\n * Responsible for returning a svg path length.\n * @return {number} path length\n */\n _getPathLength(el) {\n return Math.ceil(el.getTotalLength());\n }\n\n /**\n * _getPathPoints\n * Responsible for returning a svg path coords.\n * @return {array} path coords\n */\n _getPathPoints(el, length) {\n\n let arr = [];\n\n for (let i = 0; i < length; i++) {\n let position = el.getPointAtLength(i);\n\n arr.push({\n x: position.x,\n y: position.y\n });\n };\n return arr;\n }\n\n /**\n * _getSVGElement\n * Returns empty svg element with specified viewBox aspect ratio.\n * @private\n * @param {string} viewBox\n * @return {obj} jquery wrapped svg el\n */\n _getSVGElement(viewBox) {\n let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttributeNS(null, 'viewBox', viewBox);\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n return svg;\n };\n\n /**\n * _getStrokeDashArray\n * @private\n */\n _getStrokeDashArray(path, length) {\n let strokeDash;\n\n if (path.strokeDash) {\n strokeDash = this._getStrokeDashString(path.strokeDash, length);\n } else if (this.config.strokeDash) {\n strokeDash = this._getStrokeDashString(this.config.strokeDash, length);\n } else {\n strokeDash = length + ' ' + length;\n };\n return strokeDash;\n }\n\n /**\n * _getStrokeDashString\n * @private\n */\n _getStrokeDashString(dashArray, length) {\n let strokeDashString = '';\n let strokeDashArray = dashArray.split(',');\n let strokeDashTotal = 0;\n let strokeDashNum;\n let strokeDashRemainder;\n\n for (let i = strokeDashArray.length - 1; i >= 0; i--) {\n strokeDashTotal += Number(strokeDashArray[i]);\n };\n strokeDashNum = Math.floor(length / strokeDashTotal);\n strokeDashRemainder = length - (strokeDashNum * strokeDashTotal);\n for (let i = strokeDashNum - 1; i >= 0; i--) {\n strokeDashString += (dashArray + ', ');\n };\n let preArray = strokeDashString + strokeDashRemainder + ', ' + length;\n\n return preArray.split(',').join('px,') + 'px';\n }\n\n}\nwindow.LazyLinePainter = LazyLinePainter;\nexport default LazyLinePainter;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://lazy-line-painter/webpack/universalModuleDefinition","webpack://lazy-line-painter/webpack/bootstrap","webpack://lazy-line-painter/./src/easing.js","webpack://lazy-line-painter/./src/events.js","webpack://lazy-line-painter/./src/index.js"],"names":["Easing","easeLinear","t","b","c","d","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","Math","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBack","s","undefined","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","EventEmitter","on","name","callback","_eventEmitterCallbacks","push","addListener","off","i","indexOf","splice","removeListener","emit","evt","trigger","LazyLinePainter","el","config","Object","assign","paths","strokeWidth","strokeDash","strokeColor","strokeOverColor","strokeCap","strokeJoin","strokeOpacity","delay","ease","drawSequential","speedMultiplier","reverse","paused","progress","longestDuration","playhead","log","offset","getBoundingClientRect","initialised","Events","__raf","composed","Boolean","dataset","llpComposed","querySelectorAll","uncomposed","length","className","classList","add","_parseDataAttrs","_updateDuration","_initialised","_setupPaths","id","replace","llpId","llpDuration","llpDelay","console","then","erase","requestAnimationFrame","timestamp","_paint","cancelAnimationFrame","adjustStartTime","startTime","elapsedTime","onStrokeCompleteDone","path","style","strokeDashoffset","onStrokeStartDone","remove","prop","value","_setProgress","_setDelay","_updatePaths","totalDuration","_getTotalDuration","_getLongestDuration","_calcPathDurations","positions","_getPathPoints","_updatePosition","Number","duration","llpReverse","llpEase","_setStyleAttrs","llpStrokeColor","setAttributeNS","llpStrokeOpacity","llpStrokeWidth","llpStrokeCap","llpStrokeJoin","resolve","reject","Promise","index","_getPathLength","strokeDasharray","startProgress","durationProgress","_getProgress","elapsedProgress","_getElapsedProgress","_setLine","_updateStrokeCallbacks","start","elapsed","round","position","x","left","y","top","pathDelay","pathTotalDuration","ceil","getTotalLength","arr","getPointAtLength","_getStrokeDashString","dashArray","strokeDashString","strokeDashArray","split","strokeDashTotal","strokeDashNum","strokeDashRemainder","floor","preArray","join","window"],"mappings":"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","file":"lazy-line-painter-1.9.0.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"lazy-line-painter\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"lazy-line-painter\"] = factory();\n\telse\n\t\troot[\"lazy-line-painter\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.js\");\n","\n/*\n *\n * TERMS OF USE - EASING EQUATIONS\n *\n * Open source under the BSD License.\n *\n * Copyright © 2001 Robert Penner\n * All rights reserved.\n *\n */\n\nlet Easing = {\n\n easeLinear(t, b, c, d) {\n return c * t / d + b;\n },\n\n easeInQuad(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n easeOutQuad(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n easeInOutQuad(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t + b;\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n },\n\n easeInCubic(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n\n easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n\n easeInOutCubic(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n },\n\n easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n\n easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n\n easeInOutQuart(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n },\n\n easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n\n easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n\n easeInOutQuint(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n },\n\n easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n\n easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n\n easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n\n easeInExpo(t, b, c, d) {\n return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n },\n\n easeOutExpo(t, b, c, d) {\n return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n\n easeInOutExpo(t, b, c, d) {\n if (t === 0) return b;\n if (t === d) return b + c;\n if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n },\n\n easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n\n easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n\n easeInOutCirc(t, b, c, d) {\n if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n\n easeInBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n\n easeOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n\n easeInOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n },\n\n easeInBounce(t, b, c, d) {\n return c - this.easeOutBounce(d - t, 0, c, d) + b;\n },\n\n easeOutBounce(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n } else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n } else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n }\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n\n },\n\n easeInOutBounce(t, b, c, d) {\n if (t < d / 2) return this.easeInBounce(t * 2, 0, c, d) * 0.5 + b;\n return this.easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n};\n\nexport default Easing;\n","let EventEmitter = {};\n\nEventEmitter.on = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n this._eventEmitterCallbacks[name] = this._eventEmitterCallbacks[name] || [];\n this._eventEmitterCallbacks[name].push(callback);\n};\nEventEmitter.addListener = EventEmitter.on;\n\nEventEmitter.off = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n const i = this._eventEmitterCallbacks[name].indexOf(callback);\n\n if (i < 0) return;\n this._eventEmitterCallbacks[name].splice(i, 1);\n};\nEventEmitter.removeListener = EventEmitter.off;\n\nEventEmitter.emit = function (name, evt) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n for (let callback of this._eventEmitterCallbacks[name]) {\n if (typeof callback !== 'function') return;\n callback(evt);\n }\n};\nEventEmitter.trigger = EventEmitter.emit;\n\nexport default EventEmitter;\n","/*\n * Lazy Line Painter\n * SVG Stroke animation.\n *\n * https://github.com/camoconnell/lazy-line-painter\n * http://www.camoconnell.com\n *\n * Copyright 2013-2018 Cam O'Connell\n * All rights reserved.\n *\n * Licensed under the MIT license.\n *\n */\n\nimport Events from './events';\nimport Easing from './easing';\n\nclass LazyLinePainter {\n\n /**\n * init\n * Responsible for caching user options,\n * @public\n * @param {object} opts user defined options\n */\n\n constructor(el, config) {\n\n this.el = el;\n this.config = Object.assign({\n\n paths: [],\n\n strokeWidth: null,\n strokeDash: null,\n strokeColor: null,\n strokeOverColor: null,\n strokeCap: null,\n strokeJoin: null,\n strokeOpacity: null,\n\n delay: 0,\n ease: null,\n drawSequential: false,\n speedMultiplier: 1,\n reverse: false,\n paused: false,\n progress: 0,\n\n longestDuration: 0,\n playhead: 0,\n log: true,\n offset: this.el.getBoundingClientRect(),\n initialised: false\n\n }, config, {});\n Object.assign(this, Events, {});\n\n this.__raf = null;\n\n let paths;\n let composed = Boolean(this.el.dataset.llpComposed);\n\n if (composed) {\n paths = this.el.querySelectorAll('[data-llp-id]');\n } else {\n paths = this.uncomposed();\n }\n\n let i;\n\n for (i = 0; i < paths.length; i++) {\n this.config.paths.push({\n el: paths[i]\n });\n }\n\n this.className = 'lazy-line-painter';\n this.el.classList.add(this.className);\n\n this._parseDataAttrs();\n this._updateDuration();\n\n this._initialised = this._setupPaths();\n }\n\n uncomposed() {\n let paths = this.el.querySelectorAll('path, polygon, circle, ellipse, polyline, line, rect');\n let i;\n\n for (i = 0; i < paths.length; i++) {\n let id = this.el.id.replace(/ /g, '');\n\n id = id.replace('.', '');\n id = id.replace('-', '');\n paths[i].dataset.llpId = id + '-' + i;\n paths[i].dataset.llpDuration = 5000;\n paths[i].dataset.llpDelay = 0;\n }\n\n if (this.config.log) {\n console.log('This lazy line is uncomposed! Visit http://lazylinepainter.info to compose your masterpiece!');\n }\n\n return paths;\n }\n\n /**\n * paint\n * Responsible for drawing path.\n * @public\n */\n\n paint() {\n\n return this._initialised.then(() => {\n\n this.erase();\n\n // begin animation\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n\n // fire onStart callback\n this.emit('start');\n\n });\n }\n\n /**\n * pause\n * Responsible for pausing path animation.\n * @public\n */\n pause() {\n if (!this.config.paused) {\n this.config.paused = true;\n cancelAnimationFrame(this.__raf);\n }\n }\n\n /**\n * resume\n * Responsible for resuming path animation.\n * @public\n */\n resume() {\n if (this.config.paused) {\n requestAnimationFrame((timestamp) => {\n this.adjustStartTime(timestamp);\n });\n this.config.paused = false;\n }\n }\n\n /**\n * erase\n * Responsible for clearing path,\n * paint can still be called on the element after it has been erased.\n * @public\n */\n erase() {\n\n // reset / cancel rAF\n this.config.startTime = null;\n this.config.elapsedTime = null;\n cancelAnimationFrame(this.__raf);\n\n // reset callback\n this.config.onStrokeCompleteDone = false;\n\n // reset paused\n this.config.paused = false;\n\n // empty contents of svg\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.style.strokeDashoffset = path.length;\n path.onStrokeCompleteDone = false;\n path.onStrokeStartDone = false;\n }\n }\n\n /**\n * destroy\n * Responsible for removing lazyline data and element from DOM\n * @public\n */\n destroy() {\n\n // retrieve / remove data object\n this.config = null;\n\n // remove class\n this.el.classList.remove(this.className);\n\n // empty container element\n this.el.remove();\n this.el = null;\n\n }\n\n /**\n * set\n * @public\n */\n set(prop, value) {\n switch (prop) {\n case 'progress':\n this._setProgress(value);\n break;\n case 'delay':\n this._setDelay(value);\n break;\n default:\n if (this.config.log) {\n console.log('property ' + prop + ' can not be set');\n }\n }\n }\n\n _setProgress(progress) {\n this.config.progress = progress;\n this._updatePaths();\n }\n\n _setDelay(delay) {\n this.config.delay = delay;\n this._updateDuration();\n }\n\n _updateDuration() {\n\n this.config.totalDuration = this.config.drawSequential ? this._getTotalDuration() : this._getLongestDuration();\n this.config.totalDuration += this.config.delay;\n\n console.log(this.config.totalDuration);\n\n this._calcPathDurations();\n }\n\n /**\n * get\n * @public\n */\n get() {\n return this.config;\n }\n\n /**\n * resize\n * @public\n */\n resize() {\n\n this.config.offset = this.el.getBoundingClientRect();\n // this.config.scale = this.config.offset.width / this.config.width;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.getBoundingClientRect();\n path.positions = this._getPathPoints(path.el, path.length);\n this._updatePosition(path);\n }\n }\n\n _parseDataAttrs() {\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.id = path.el.dataset.llpId;\n path.delay = Number(path.el.dataset.llpDelay) || 0;\n path.duration = Number(path.el.dataset.llpDuration) || 0;\n path.reverse = Number(path.el.dataset.llpReverse) || false;\n path.ease = Number(path.el.dataset.llpEase) || null;\n // path.strokeDash = path.el.dataset.llpStrokeDash || null;\n\n path.delay *= this.config.speedMultiplier;\n path.duration *= this.config.speedMultiplier;\n\n this._setStyleAttrs(path);\n }\n }\n\n _setStyleAttrs(path) {\n\n path.strokeColor = (path.el.dataset.llpStrokeColor || this.config.strokeColor);\n\n if (path.strokeColor) {\n path.el.setAttributeNS(null, 'stroke', path.strokeColor);\n }\n\n path.strokeOpacity = (path.el.dataset.llpStrokeOpacity || this.config.strokeOpacity);\n if (path.strokeOpacity) {\n path.el.setAttributeNS(null, 'stroke-opacity', path.strokeOpacity);\n }\n\n path.strokeWidth = (path.el.dataset.llpStrokeWidth || this.config.strokeWidth);\n if (path.strokeWidth) {\n path.el.setAttributeNS(null, 'stroke-width', path.strokeWidth);\n }\n\n path.strokeCap = (path.el.dataset.llpStrokeCap || this.config.strokeCap);\n if (path.strokeCap) {\n path.el.setAttributeNS(null, 'stroke-linecap', path.strokeCap);\n }\n\n path.strokeJoin = (path.el.dataset.llpStrokeJoin || this.config.strokeJoin);\n if (path.strokeJoin) {\n path.el.setAttributeNS(null, 'stroke-linejoin', path.strokeJoin);\n }\n }\n\n _setupPaths(resolve, reject) {\n\n return new Promise((resolve, reject) => {\n\n for (let i = 0; i < this.config.paths.length; i++) {\n\n let path = this.config.paths[i];\n\n path.index = i;\n path.length = this._getPathLength(path.el);\n path.positions = this._getPathPoints(path.el, path.length);\n\n path.el.style.strokeDashoffset = path.length;\n path.el.style.strokeDasharray = path.length;\n\n path.onStrokeStartDone = false;\n path.onStrokeCompleteDone = false;\n }\n\n resolve();\n\n });\n\n };\n\n _calcPathDurations() {\n let startTime = this.config.reverse ? this.config.totalDuration : this.config.delay;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n\n let path = this.config.paths[i];\n\n path.progress = 0;\n\n if (this.config.reverse) {\n startTime -= path.duration;\n } else {\n if (this.config.drawSequential) {\n startTime = 0;\n } else {\n startTime = path.delay;\n }\n }\n\n path.startTime = startTime;\n path.startProgress = (path.startTime / this.config.totalDuration);\n path.durationProgress = (path.duration / this.config.totalDuration);\n }\n }\n\n /**\n * adjustStartTime\n * Responsible for managing time.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n adjustStartTime(timestamp) {\n this.config.startTime = timestamp - this.config.elapsedTime;\n requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n }\n\n /**\n * _paint\n * Responsible for animating paths.\n * Path incrementation is performed using requestAnimationFrame.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n _paint(timestamp) {\n\n if (!this.config) {\n return;\n }\n\n // set startTime\n if (!this.config.startTime) {\n this.config.startTime = timestamp;\n }\n\n this.emit('update');\n\n // set elapsedTime\n this.config.elapsedTime = (timestamp - this.config.startTime);\n this.config.progress = this._getProgress(\n this.config.totalDuration,\n this.config.startTime,\n this.config.elapsedTime,\n this.config.ease\n );\n\n this._updatePaths();\n\n if (this.config.progress < 1) {\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n } else {\n this.emit('complete');\n }\n }\n\n _updatePaths() {\n\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n let elapsedProgress = this._getElapsedProgress(path);\n\n path.progress = this._getProgress(1, 0, elapsedProgress, path.ease, path);\n this._setLine(path);\n this._updatePosition(path);\n this._updateStrokeCallbacks(path);\n }\n }\n\n _getElapsedProgress(path) {\n\n let elapsedProgress;\n\n if (\n this.config.progress >= path.startProgress &&\n this.config.progress <= (path.startProgress + path.durationProgress)\n ) {\n elapsedProgress = (this.config.progress - path.startProgress) / path.durationProgress;\n } else if (this.config.progress >= (path.startProgress + path.durationProgress)) {\n elapsedProgress = 1;\n } else if (this.config.progress <= path.startProgress) {\n elapsedProgress = 0;\n }\n\n return elapsedProgress;\n }\n\n _getProgress(duration, start, elapsed, ease, path) {\n let progress;\n\n if (elapsed > 0 && elapsed < duration) {\n if (ease) {\n progress = Easing[ease](elapsed, 0, 1, duration);\n } else {\n progress = elapsed / duration;\n }\n } else if (elapsed >= duration) {\n progress = 1;\n } else if (elapsed <= start) {\n progress = 0;\n }\n\n return progress;\n }\n\n _setLine(path) {\n\n let el = path.el;\n let length = path.progress * path.length;\n\n if (this.config.reverse || path.reverse) {\n el.style.strokeDashoffset = -path.length + length;\n } else {\n el.style.strokeDashoffset = path.length - length;\n }\n }\n\n _updateStrokeCallbacks(path) {\n\n if (path.progress === 1) {\n\n if (!path.onStrokeCompleteDone) {\n path.onStrokeCompleteDone = true;\n\n this.emit('complete:' + path.id, path);\n this.emit('complete:all', path);\n }\n\n } else if (path.progress > 0.00001) {\n\n if (!path.onStrokeStartDone) {\n this.emit('start:' + path.id, path);\n this.emit('start:all', path);\n path.onStrokeStartDone = true;\n }\n\n this.emit('update:' + path.id, path);\n this.emit('update:all', path);\n }\n }\n\n /**\n * _updatePosition\n * Responsible for updating the paths x / y position.\n * @private\n */\n _updatePosition(path) {\n let index = Math.round((path.progress * (path.length - 1)));\n let position = path.positions[index];\n\n path.position = {\n x: this.config.offset.left + position.x,\n y: this.config.offset.top + position.y\n };\n }\n\n _getTotalDuration() {\n let totalDuration = 0;\n let paths = this.config.paths;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n totalDuration += (paths[i].duration + pathDelay);\n }\n\n return totalDuration;\n }\n\n _getLongestDuration() {\n let longestDuration = 0;\n let paths = this.config.paths;\n\n for (let i = 0; i < paths.length; i++) {\n let pathTotalDuration = paths[i].delay + paths[i].duration;\n\n if (pathTotalDuration > longestDuration) {\n longestDuration = pathTotalDuration;\n }\n }\n return longestDuration;\n };\n\n /**\n * _getPathLength\n * Responsible for returning a svg path length.\n * @return {number} path length\n */\n _getPathLength(el) {\n return Math.ceil(el.getTotalLength());\n }\n\n /**\n * _getPathPoints\n * Responsible for returning a svg path coords.\n * @return {array} path coords\n */\n _getPathPoints(el, length) {\n\n let arr = [];\n\n for (let i = 0; i < length; i++) {\n let position = el.getPointAtLength(i);\n\n arr.push({\n x: position.x,\n y: position.y\n });\n };\n return arr;\n }\n\n /**\n * _getStrokeDashArray\n * @private\n */\n _getStrokeDashArray(path, length) {\n let strokeDash;\n\n if (path.strokeDash) {\n strokeDash = this._getStrokeDashString(path.strokeDash, length);\n } else if (this.config.strokeDash) {\n strokeDash = this._getStrokeDashString(this.config.strokeDash, length);\n } else {\n strokeDash = length + ' ' + length;\n };\n return strokeDash;\n }\n\n /**\n * _getStrokeDashString\n * @private\n */\n _getStrokeDashString(dashArray, length) {\n let strokeDashString = '';\n let strokeDashArray = dashArray.split(',');\n let strokeDashTotal = 0;\n let strokeDashNum;\n let strokeDashRemainder;\n\n for (let i = strokeDashArray.length - 1; i >= 0; i--) {\n strokeDashTotal += Number(strokeDashArray[i]);\n };\n strokeDashNum = Math.floor(length / strokeDashTotal);\n strokeDashRemainder = length - (strokeDashNum * strokeDashTotal);\n for (let i = strokeDashNum - 1; i >= 0; i--) {\n strokeDashString += (dashArray + ', ');\n };\n let preArray = strokeDashString + strokeDashRemainder + ', ' + length;\n\n return preArray.split(',').join('px,') + 'px';\n }\n\n}\nwindow.LazyLinePainter = LazyLinePainter;\nexport default LazyLinePainter;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/lazy-line-painter-1.9.0.min.js b/lib/lazy-line-painter-1.9.0.min.js index b8dd7e8..c678e5c 100644 --- a/lib/lazy-line-painter-1.9.0.min.js +++ b/lib/lazy-line-painter-1.9.0.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("lazy-line-painter",[],e):"object"==typeof exports?exports["lazy-line-painter"]=e():t["lazy-line-painter"]=e()}(window,function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i={easeLinear:function(t,e,n,i){return n*t/i+e},easeInQuad:function(t,e,n,i){return n*(t/=i)*t+e},easeOutQuad:function(t,e,n,i){return-n*(t/=i)*(t-2)+e},easeInOutQuad:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e},easeInCubic:function(t,e,n,i){return n*(t/=i)*t*t+e},easeOutCubic:function(t,e,n,i){return n*((t=t/i-1)*t*t+1)+e},easeInOutCubic:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e},easeInQuart:function(t,e,n,i){return n*(t/=i)*t*t*t+e},easeOutQuart:function(t,e,n,i){return-n*((t=t/i-1)*t*t*t-1)+e},easeInOutQuart:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e},easeInQuint:function(t,e,n,i){return n*(t/=i)*t*t*t*t+e},easeOutQuint:function(t,e,n,i){return n*((t=t/i-1)*t*t*t*t+1)+e},easeInOutQuint:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e},easeInSine:function(t,e,n,i){return-n*Math.cos(t/i*(Math.PI/2))+n+e},easeOutSine:function(t,e,n,i){return n*Math.sin(t/i*(Math.PI/2))+e},easeInOutSine:function(t,e,n,i){return-n/2*(Math.cos(Math.PI*t/i)-1)+e},easeInExpo:function(t,e,n,i){return 0===t?e:n*Math.pow(2,10*(t/i-1))+e},easeOutExpo:function(t,e,n,i){return t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e},easeInOutExpo:function(t,e,n,i){return 0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e},easeInCirc:function(t,e,n,i){return-n*(Math.sqrt(1-(t/=i)*t)-1)+e},easeOutCirc:function(t,e,n,i){return n*Math.sqrt(1-(t=t/i-1)*t)+e},easeInOutCirc:function(t,e,n,i){return(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e},easeInBack:function(t,e,n,i,r){return void 0===r&&(r=1.70158),n*(t/=i)*t*((r+1)*t-r)+e},easeOutBack:function(t,e,n,i,r){return void 0===r&&(r=1.70158),n*((t=t/i-1)*t*((r+1)*t+r)+1)+e},easeInOutBack:function(t,e,n,i,r){return void 0===r&&(r=1.70158),(t/=i/2)<1?n/2*(t*t*((1+(r*=1.525))*t-r))+e:n/2*((t-=2)*t*((1+(r*=1.525))*t+r)+2)+e},easeInBounce:function(t,e,n,i){return n-this.easeOutBounce(i-t,0,n,i)+e},easeOutBounce:function(t,e,n,i){return(t/=i)<1/2.75?n*(7.5625*t*t)+e:t<2/2.75?n*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?n*(7.5625*(t-=2.25/2.75)*t+.9375)+e:n*(7.5625*(t-=2.625/2.75)*t+.984375)+e},easeInOutBounce:function(t,e,n,i){return tt.startProgress&&this.config.progress=t.startProgress+t.durationProgress?e=1:this.config.progress<=t.startProgress&&(e=0),e}},{key:"_getProgress",value:function(t,e,n,i){var s;return n>0&&n=t?s=1:n<=e&&(s=0),s}},{key:"_setLine",value:function(t){var e=t.el,n=t.progress*t.length;this.config.reverse||t.reverse?e.style.strokeDashoffset=-t.length+n:e.style.strokeDashoffset=t.length-n}},{key:"_updateStrokeCallbacks",value:function(t){1===t.progress?t.onStrokeCompleteDone||(t.onStrokeCompleteDone=!0,this.emit("complete:"+t.id,t),this.emit("complete:all",t)):t.progress>1e-5&&(t.onStrokeStartDone||(this.emit("start:"+t.id,t),this.emit("start:all",t),t.onStrokeStartDone=!0),this.emit("update:"+t.id,t),this.emit("update:all",t))}},{key:"_updatePosition",value:function(t){var e=Math.round(t.progress*(t.length-1)),n=t.positions[e];t.position={x:this.config.offset.left+n.x,y:this.config.offset.top+n.y}}},{key:"_getTotalDuration",value:function(t){for(var e=0,n=0;ne&&(e=t[n].duration+i)}return e}},{key:"_getPathLength",value:function(t){return Math.ceil(t.getTotalLength())}},{key:"_getPathPoints",value:function(t,e){for(var n=[],i=0;i=0;a--)o+=Number(s[a]);i=e-(n=Math.floor(e/o))*o;for(var u=n-1;u>=0;u--)r+=t+", ";return(r+i+", "+e).split(",").join("px,")+"px"}}]),t}();window.LazyLinePainter=a;var u=a;e.default=u,t.exports=e.default}])}); +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("lazy-line-painter",[],e):"object"==typeof exports?exports["lazy-line-painter"]=e():t["lazy-line-painter"]=e()}(window,function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var s=e[i]={i:i,l:!1,exports:{}};return t[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i={easeLinear:function(t,e,n,i){return n*t/i+e},easeInQuad:function(t,e,n,i){return n*(t/=i)*t+e},easeOutQuad:function(t,e,n,i){return-n*(t/=i)*(t-2)+e},easeInOutQuad:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t+e:-n/2*(--t*(t-2)-1)+e},easeInCubic:function(t,e,n,i){return n*(t/=i)*t*t+e},easeOutCubic:function(t,e,n,i){return n*((t=t/i-1)*t*t+1)+e},easeInOutCubic:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t+e:n/2*((t-=2)*t*t+2)+e},easeInQuart:function(t,e,n,i){return n*(t/=i)*t*t*t+e},easeOutQuart:function(t,e,n,i){return-n*((t=t/i-1)*t*t*t-1)+e},easeInOutQuart:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t+e:-n/2*((t-=2)*t*t*t-2)+e},easeInQuint:function(t,e,n,i){return n*(t/=i)*t*t*t*t+e},easeOutQuint:function(t,e,n,i){return n*((t=t/i-1)*t*t*t*t+1)+e},easeInOutQuint:function(t,e,n,i){return(t/=i/2)<1?n/2*t*t*t*t*t+e:n/2*((t-=2)*t*t*t*t+2)+e},easeInSine:function(t,e,n,i){return-n*Math.cos(t/i*(Math.PI/2))+n+e},easeOutSine:function(t,e,n,i){return n*Math.sin(t/i*(Math.PI/2))+e},easeInOutSine:function(t,e,n,i){return-n/2*(Math.cos(Math.PI*t/i)-1)+e},easeInExpo:function(t,e,n,i){return 0===t?e:n*Math.pow(2,10*(t/i-1))+e},easeOutExpo:function(t,e,n,i){return t===i?e+n:n*(1-Math.pow(2,-10*t/i))+e},easeInOutExpo:function(t,e,n,i){return 0===t?e:t===i?e+n:(t/=i/2)<1?n/2*Math.pow(2,10*(t-1))+e:n/2*(2-Math.pow(2,-10*--t))+e},easeInCirc:function(t,e,n,i){return-n*(Math.sqrt(1-(t/=i)*t)-1)+e},easeOutCirc:function(t,e,n,i){return n*Math.sqrt(1-(t=t/i-1)*t)+e},easeInOutCirc:function(t,e,n,i){return(t/=i/2)<1?-n/2*(Math.sqrt(1-t*t)-1)+e:n/2*(Math.sqrt(1-(t-=2)*t)+1)+e},easeInBack:function(t,e,n,i,s){return void 0===s&&(s=1.70158),n*(t/=i)*t*((s+1)*t-s)+e},easeOutBack:function(t,e,n,i,s){return void 0===s&&(s=1.70158),n*((t=t/i-1)*t*((s+1)*t+s)+1)+e},easeInOutBack:function(t,e,n,i,s){return void 0===s&&(s=1.70158),(t/=i/2)<1?n/2*(t*t*((1+(s*=1.525))*t-s))+e:n/2*((t-=2)*t*((1+(s*=1.525))*t+s)+2)+e},easeInBounce:function(t,e,n,i){return n-this.easeOutBounce(i-t,0,n,i)+e},easeOutBounce:function(t,e,n,i){return(t/=i)<1/2.75?n*(7.5625*t*t)+e:t<2/2.75?n*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?n*(7.5625*(t-=2.25/2.75)*t+.9375)+e:n*(7.5625*(t-=2.625/2.75)*t+.984375)+e},easeInOutBounce:function(t,e,n,i){return tt.startProgress&&this.config.progress=t.startProgress+t.durationProgress?e=1:this.config.progress<=t.startProgress&&(e=0),e}},{key:"_getProgress",value:function(t,e,n,i){var r;return n>0&&n=t?r=1:n<=e&&(r=0),r}},{key:"_setLine",value:function(t){var e=t.el,n=t.progress*t.length;this.config.reverse||t.reverse?e.style.strokeDashoffset=-t.length+n:e.style.strokeDashoffset=t.length-n}},{key:"_updateStrokeCallbacks",value:function(t){1===t.progress?t.onStrokeCompleteDone||(t.onStrokeCompleteDone=!0,this.emit("complete:"+t.id,t),this.emit("complete:all",t)):t.progress>1e-5&&(t.onStrokeStartDone||(this.emit("start:"+t.id,t),this.emit("start:all",t),t.onStrokeStartDone=!0),this.emit("update:"+t.id,t),this.emit("update:all",t))}},{key:"_updatePosition",value:function(t){var e=Math.round(t.progress*(t.length-1)),n=t.positions[e];t.position={x:this.config.offset.left+n.x,y:this.config.offset.top+n.y}}},{key:"_getTotalDuration",value:function(t){for(var e=0,n=0;ne&&(e=t[n].duration+i)}return e}},{key:"_getPathLength",value:function(t){return Math.ceil(t.getTotalLength())}},{key:"_getPathPoints",value:function(t,e){for(var n=[],i=0;i=0;a--)o+=Number(r[a]);i=e-(n=Math.floor(e/o))*o;for(var l=n-1;l>=0;l--)s+=t+", ";return(s+i+", "+e).split(",").join("px,")+"px"}}]),t}();window.LazyLinePainter=a;var l=a;e.default=l,t.exports=e.default}])}); //# sourceMappingURL=lazy-line-painter-1.9.0.min.js.map \ No newline at end of file diff --git a/lib/lazy-line-painter-1.9.0.min.js.map b/lib/lazy-line-painter-1.9.0.min.js.map index 6a02ec9..a292552 100644 --- a/lib/lazy-line-painter-1.9.0.min.js.map +++ b/lib/lazy-line-painter-1.9.0.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://lazy-line-painter/webpack/universalModuleDefinition","webpack://lazy-line-painter/webpack/bootstrap","webpack://lazy-line-painter/./src/easing.js","webpack://lazy-line-painter/./src/events.js","webpack://lazy-line-painter/./src/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","easeLinear","b","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","Math","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBack","undefined","easeOutBack","easeInOutBack","easeInBounce","this","easeOutBounce","easeInOutBounce","EventEmitter","callback","_eventEmitterCallbacks","push","addListener","on","off","indexOf","splice","removeListener","emit","evt","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","err","return","trigger","_events","_interopRequireDefault","_easing","LazyLinePainter","el","config","_classCallCheck","assign","paths","strokeWidth","strokeDash","strokeColor","strokeOverColor","strokeCap","strokeJoin","strokeOpacity","delay","ease","drawSequential","speedMultiplier","reverse","paused","progress","longestDuration","playhead","Events","__raf","querySelectorAll","length","className","classList","add","_parseDataAttrs","totalDuration","_getTotalDuration","_getLongestDuration","_setupPaths","resize","_this","erase","requestAnimationFrame","timestamp","_paint","cancelAnimationFrame","_this2","adjustStartTime","startTime","elapsedTime","onStrokeCompleteDone","path","style","strokeDashoffset","onStrokeStartDone","remove","_updatePaths","offset","getBoundingClientRect","positions","_getPathPoints","_updatePosition","id","dataset","llpId","Number","llpDelay","duration","llpDuration","llpReverse","llpEase","llpStrokeDash","_setStyleAttrs","llpStrokeColor","setAttributeNS","llpStrokeOpacity","llpStrokeWidth","llpStrokeCap","llpStrokeJoin","index","_getPathLength","strokeDasharray","_getStrokeDashArray","startProgress","durationProgress","_this3","_this4","_getProgress","elapsedProgress","_getElapsedProgress","_setLine","_updateStrokeCallbacks","start","elapsed","Easing","round","position","x","left","y","top","pathDelay","ceil","getTotalLength","arr","getPointAtLength","viewBox","svg","document","createElementNS","setAttribute","_getStrokeDashString","dashArray","strokeDashNum","strokeDashRemainder","strokeDashString","strokeDashArray","split","strokeDashTotal","floor","join"],"mappings":"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","file":"lazy-line-painter-1.9.0.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"lazy-line-painter\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"lazy-line-painter\"] = factory();\n\telse\n\t\troot[\"lazy-line-painter\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","\n/*\n *\n * TERMS OF USE - EASING EQUATIONS\n *\n * Open source under the BSD License.\n *\n * Copyright © 2001 Robert Penner\n * All rights reserved.\n *\n */\n\nlet Easing = {\n\n easeLinear(t, b, c, d) {\n return c * t / d + b;\n },\n\n easeInQuad(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n easeOutQuad(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n easeInOutQuad(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t + b;\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n },\n\n easeInCubic(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n\n easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n\n easeInOutCubic(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n },\n\n easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n\n easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n\n easeInOutQuart(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n },\n\n easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n\n easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n\n easeInOutQuint(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n },\n\n easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n\n easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n\n easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n\n easeInExpo(t, b, c, d) {\n return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n },\n\n easeOutExpo(t, b, c, d) {\n return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n\n easeInOutExpo(t, b, c, d) {\n if (t === 0) return b;\n if (t === d) return b + c;\n if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n },\n\n easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n\n easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n\n easeInOutCirc(t, b, c, d) {\n if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n\n easeInBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n\n easeOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n\n easeInOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n },\n\n easeInBounce(t, b, c, d) {\n return c - this.easeOutBounce(d - t, 0, c, d) + b;\n },\n\n easeOutBounce(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n } else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n } else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n }\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n\n },\n\n easeInOutBounce(t, b, c, d) {\n if (t < d / 2) return this.easeInBounce(t * 2, 0, c, d) * 0.5 + b;\n return this.easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n};\n\nexport default Easing;\n","let EventEmitter = {};\n\nEventEmitter.on = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n this._eventEmitterCallbacks[name] = this._eventEmitterCallbacks[name] || [];\n this._eventEmitterCallbacks[name].push(callback);\n};\nEventEmitter.addListener = EventEmitter.on;\n\nEventEmitter.off = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n const i = this._eventEmitterCallbacks[name].indexOf(callback);\n\n if (i < 0) return;\n this._eventEmitterCallbacks[name].splice(i, 1);\n};\nEventEmitter.removeListener = EventEmitter.off;\n\nEventEmitter.emit = function (name, evt) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n for (let callback of this._eventEmitterCallbacks[name]) {\n if (typeof callback !== 'function') return;\n callback(evt);\n }\n};\nEventEmitter.trigger = EventEmitter.emit;\n\nexport default EventEmitter;\n","/*\n * Lazy Line Painter\n * SVG Stroke animation.\n *\n * https://github.com/camoconnell/lazy-line-painter\n * http://www.camoconnell.com\n *\n * Copyright 2013-2018 Cam O'Connell\n * All rights reserved.\n *\n * Licensed under the MIT license.\n *\n */\n\nimport Events from './events';\nimport Easing from './easing';\n\nclass LazyLinePainter {\n\n /**\n * init\n * Responsible for caching user options,\n * @public\n * @param {object} opts user defined options\n */\n\n constructor(el, config) {\n\n this.el = el;\n this.config = Object.assign({\n\n 'paths': [],\n\n 'strokeWidth': null,\n 'strokeDash': null,\n 'strokeColor': null,\n 'strokeOverColor': null,\n 'strokeCap': null,\n 'strokeJoin': null,\n 'strokeOpacity': null,\n\n 'delay': 0,\n 'ease': null,\n 'drawSequential': false,\n 'speedMultiplier': 1,\n 'reverse': false,\n 'paused': false,\n 'progress': 0,\n\n 'longestDuration': 0,\n 'playhead': 0\n\n }, config, {});\n Object.assign(this, Events, {});\n\n this.__raf = null;\n\n let paths = this.el.querySelectorAll('[data-llp-id]');\n let i;\n\n for (i = 0; i < paths.length; i++) {\n this.config.paths.push({\n el: paths[i]\n });\n }\n\n this.className = 'lazy-line-painter';\n this.el.classList.add(this.className);\n this._parseDataAttrs();\n let totalDuration = this.config.delay + this._getTotalDuration(this.config.paths);\n let longestDuration = this.config.delay + this._getLongestDuration(this.config.paths);\n\n this.config.totalDuration = this.config.drawSequential ? totalDuration : longestDuration;\n this.config.totalDuration *= this.config.speedMultiplier;\n this._setupPaths();\n\n this.resize();\n }\n\n /**\n * paint\n * Responsible for drawing path.\n * @public\n */\n paint() {\n\n this.erase();\n\n // begin animation\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n\n // fire onStart callback\n // if (this.config.onStart !== null) {\n // this.config.onStart();\n // }\n this.emit('start');\n }\n\n /**\n * pause\n * Responsible for pausing path animation.\n * @public\n */\n pause() {\n if (!this.config.paused) {\n this.config.paused = true;\n cancelAnimationFrame(this.__raf);\n }\n }\n\n /**\n * resume\n * Responsible for resuming path animation.\n * @public\n */\n resume() {\n if (this.config.paused) {\n requestAnimationFrame((timestamp) => {\n this.adjustStartTime(timestamp);\n });\n this.config.paused = false;\n }\n }\n\n /**\n * erase\n * Responsible for clearing path,\n * paint can still be called on the element after it has been erased.\n * @public\n */\n erase() {\n\n // reset / cancel rAF\n this.config.startTime = null;\n this.config.elapsedTime = null;\n cancelAnimationFrame(this.__raf);\n\n // reset callback\n this.config.onStrokeCompleteDone = false;\n\n // reset paused\n this.config.paused = false;\n\n // empty contents of svg\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.style.strokeDashoffset = path.length;\n path.onStrokeCompleteDone = false;\n path.onStrokeStartDone = false;\n }\n }\n\n /**\n * destroy\n * Responsible for removing lazyline data and element from DOM\n * @public\n */\n destroy() {\n\n // retrieve / remove data object\n this.config = null;\n\n // remove class\n this.el.classList.remove(this.className);\n\n // empty container element\n this.el.remove();\n this.el = null;\n\n }\n\n /**\n * set\n * @public\n */\n set(progress) {\n // set elapsedTime\n this.config.progress = progress;\n this._updatePaths();\n }\n\n /**\n * get\n * @public\n */\n get() {\n return this.config;\n }\n\n /**\n * resize\n * @public\n */\n resize() {\n\n this.config.offset = this.el.getBoundingClientRect();\n // this.config.scale = this.config.offset.width / this.config.width;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.getBoundingClientRect();\n path.positions = this._getPathPoints(path.el, path.length);\n this._updatePosition(path);\n }\n }\n\n _parseDataAttrs() {\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.id = path.el.dataset.llpId;\n path.delay = Number(path.el.dataset.llpDelay) || 0;\n path.duration = Number(path.el.dataset.llpDuration) || 0;\n path.reverse = Number(path.el.dataset.llpReverse) || false;\n path.ease = Number(path.el.dataset.llpEase) || null;\n path.strokeDash = path.el.dataset.llpStrokeDash || null;\n this._setStyleAttrs(path);\n }\n }\n\n _setStyleAttrs(path) {\n path.strokeColor = (path.el.dataset.llpStrokeColor || this.config.strokeColor);\n if (path.strokeColor) {\n path.el.setAttributeNS(null, 'stroke', path.strokeColor);\n }\n\n path.strokeOpacity = (path.el.dataset.llpStrokeOpacity || this.config.strokeOpacity);\n if (path.strokeOpacity) {\n path.el.setAttributeNS(null, 'stroke-opacity', path.strokeOpacity);\n }\n\n path.strokeWidth = (path.el.dataset.llpStrokeWidth || this.config.strokeWidth);\n if (path.strokeWidth) {\n path.el.setAttributeNS(null, 'stroke-width', path.strokeWidth);\n }\n\n path.strokeCap = (path.el.dataset.llpStrokeCap || this.config.strokeCap);\n if (path.strokeCap) {\n path.el.setAttributeNS(null, 'stroke-linecap', path.strokeCap);\n }\n\n path.strokeJoin = (path.el.dataset.llpStrokeJoin || this.config.strokeJoin);\n if (path.strokeJoin) {\n path.el.setAttributeNS(null, 'stroke-linejoin', path.strokeJoin);\n }\n }\n\n _setupPaths() {\n\n let startTime = this.config.reverse ? this.config.totalDuration : 0;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n\n let path = this.config.paths[i];\n\n path.progress = 0;\n path.index = i;\n path.length = this._getPathLength(path.el);\n path.positions = this._getPathPoints(path.el, path.length);\n\n path.el.style.strokeDasharray = this._getStrokeDashArray(path, path.length);\n path.el.style.strokeDashoffset = path.length;\n path.el.getBoundingClientRect();\n\n path.onStrokeStartDone = false;\n path.onStrokeCompleteDone = false;\n\n let startProgress;\n let durationProgress = path.duration / this.config.totalDuration;\n\n if (this.config.reverse) {\n startTime -= path.duration;\n startProgress = startTime / this.config.totalDuration;\n } else {\n if (this.config.drawSequential) {\n startTime = this.config.playhead + this.config.delay;\n } else {\n startTime = path.delay + this.config.delay;\n }\n startProgress = startTime / this.config.totalDuration;\n }\n\n path.startTime = startTime;\n path.startProgress = startProgress;\n path.durationProgress = durationProgress;\n this.config.playhead += (path.duration + path.delay);\n }\n }\n\n /**\n * adjustStartTime\n * Responsible for managing time.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n adjustStartTime(timestamp) {\n this.config.startTime = timestamp - this.config.elapsedTime;\n requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n }\n\n /**\n * _paint\n * Responsible for animating paths.\n * Path incrementation is performed using requestAnimationFrame.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n _paint(timestamp) {\n\n if (!this.config) {\n return;\n }\n\n // set startTime\n if (!this.config.startTime) {\n this.config.startTime = timestamp;\n }\n\n this.emit('update');\n\n // set elapsedTime\n this.config.elapsedTime = (timestamp - this.config.startTime);\n this.config.progress = this._getProgress(\n this.config.totalDuration,\n this.config.startTime,\n this.config.elapsedTime,\n this.config.ease\n );\n\n this._updatePaths();\n\n if (this.config.progress < 1) {\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n } else {\n this.emit('complete');\n }\n }\n\n _updatePaths() {\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n let elapsedProgress = this._getElapsedProgress(path);\n\n path.progress = this._getProgress(1, 0, elapsedProgress, path.ease);\n this._setLine(path);\n this._updatePosition(path);\n this._updateStrokeCallbacks(path);\n }\n }\n\n _getElapsedProgress(path) {\n\n let elapsedProgress;\n\n if (\n this.config.progress > path.startProgress &&\n this.config.progress < (path.startProgress + path.durationProgress)\n ) {\n elapsedProgress = (this.config.progress - path.startProgress) / path.durationProgress;\n } else if (this.config.progress >= (path.startProgress + path.durationProgress)) {\n elapsedProgress = 1;\n } else if (this.config.progress <= path.startProgress) {\n elapsedProgress = 0;\n }\n\n return elapsedProgress;\n }\n\n _getProgress(duration, start, elapsed, ease) {\n\n let progress;\n\n if (elapsed > 0 && elapsed < duration) {\n if (ease) {\n progress = Easing[ease](elapsed, 0, 1, duration);\n } else {\n progress = elapsed / duration;\n }\n } else if (elapsed >= duration) {\n progress = 1;\n } else if (elapsed <= start) {\n progress = 0;\n }\n\n return progress;\n }\n\n _setLine(path) {\n\n let el = path.el;\n let length = path.progress * path.length;\n\n if (this.config.reverse || path.reverse) {\n el.style.strokeDashoffset = -path.length + length;\n } else {\n el.style.strokeDashoffset = path.length - length;\n }\n }\n\n _updateStrokeCallbacks(path) {\n\n if (path.progress === 1) {\n\n if (!path.onStrokeCompleteDone) {\n path.onStrokeCompleteDone = true;\n\n this.emit('complete:' + path.id, path);\n this.emit('complete:all', path);\n }\n\n } else if (path.progress > 0.00001) {\n\n if (!path.onStrokeStartDone) {\n this.emit('start:' + path.id, path);\n this.emit('start:all', path);\n path.onStrokeStartDone = true;\n }\n\n this.emit('update:' + path.id, path);\n this.emit('update:all', path);\n }\n }\n\n /**\n * _updatePosition\n * Responsible for updating the paths x / y position.\n * @private\n */\n _updatePosition(path) {\n let index = Math.round((path.progress * (path.length - 1)));\n let position = path.positions[index];\n\n path.position = {\n x: this.config.offset.left + position.x,\n y: this.config.offset.top + position.y\n };\n }\n\n _getTotalDuration(paths) {\n let totalDuration = 0;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n totalDuration += (paths[i].duration + pathDelay);\n }\n\n return totalDuration;\n }\n\n _getLongestDuration(paths) {\n let longestDuration = 0;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n if ((paths[i].duration + pathDelay) > longestDuration) {\n longestDuration = (paths[i].duration + pathDelay);\n }\n }\n return longestDuration;\n };\n\n /**\n * _getPathLength\n * Responsible for returning a svg path length.\n * @return {number} path length\n */\n _getPathLength(el) {\n return Math.ceil(el.getTotalLength());\n }\n\n /**\n * _getPathPoints\n * Responsible for returning a svg path coords.\n * @return {array} path coords\n */\n _getPathPoints(el, length) {\n\n let arr = [];\n\n for (let i = 0; i < length; i++) {\n let position = el.getPointAtLength(i);\n\n arr.push({\n x: position.x,\n y: position.y\n });\n };\n return arr;\n }\n\n /**\n * _getSVGElement\n * Returns empty svg element with specified viewBox aspect ratio.\n * @private\n * @param {string} viewBox\n * @return {obj} jquery wrapped svg el\n */\n _getSVGElement(viewBox) {\n let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttributeNS(null, 'viewBox', viewBox);\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n return svg;\n };\n\n /**\n * _getStrokeDashArray\n * @private\n */\n _getStrokeDashArray(path, length) {\n let strokeDash;\n\n if (path.strokeDash) {\n strokeDash = this._getStrokeDashString(path.strokeDash, length);\n } else if (this.config.strokeDash) {\n strokeDash = this._getStrokeDashString(this.config.strokeDash, length);\n } else {\n strokeDash = length + ' ' + length;\n };\n return strokeDash;\n }\n\n /**\n * _getStrokeDashString\n * @private\n */\n _getStrokeDashString(dashArray, length) {\n let strokeDashString = '';\n let strokeDashArray = dashArray.split(',');\n let strokeDashTotal = 0;\n let strokeDashNum;\n let strokeDashRemainder;\n\n for (let i = strokeDashArray.length - 1; i >= 0; i--) {\n strokeDashTotal += Number(strokeDashArray[i]);\n };\n strokeDashNum = Math.floor(length / strokeDashTotal);\n strokeDashRemainder = length - (strokeDashNum * strokeDashTotal);\n for (let i = strokeDashNum - 1; i >= 0; i--) {\n strokeDashString += (dashArray + ', ');\n };\n let preArray = strokeDashString + strokeDashRemainder + ', ' + length;\n\n return preArray.split(',').join('px,') + 'px';\n }\n\n}\nwindow.LazyLinePainter = LazyLinePainter;\nexport default LazyLinePainter;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://lazy-line-painter/webpack/universalModuleDefinition","webpack://lazy-line-painter/webpack/bootstrap","webpack://lazy-line-painter/./src/easing.js","webpack://lazy-line-painter/./src/events.js","webpack://lazy-line-painter/./src/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","easeLinear","b","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","Math","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBack","undefined","easeOutBack","easeInOutBack","easeInBounce","this","easeOutBounce","easeInOutBounce","EventEmitter","callback","_eventEmitterCallbacks","push","addListener","on","off","indexOf","splice","removeListener","emit","evt","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","err","return","trigger","_events","_interopRequireDefault","_easing","LazyLinePainter","el","config","paths","_classCallCheck","assign","strokeWidth","strokeDash","strokeColor","strokeOverColor","strokeCap","strokeJoin","strokeOpacity","delay","ease","drawSequential","speedMultiplier","reverse","paused","progress","longestDuration","playhead","log","Events","__raf","Boolean","dataset","llpComposed","querySelectorAll","uncomposed","length","className","classList","add","_parseDataAttrs","_updateDuration","_setupPaths","resize","id","replace","llpId","llpDuration","llpDelay","console","_this","erase","requestAnimationFrame","timestamp","_paint","cancelAnimationFrame","_this2","adjustStartTime","startTime","elapsedTime","onStrokeCompleteDone","path","style","strokeDashoffset","onStrokeStartDone","remove","prop","_setProgress","_setDelay","_updatePaths","totalDuration","_getTotalDuration","_getLongestDuration","offset","getBoundingClientRect","positions","_getPathPoints","_updatePosition","Number","duration","llpReverse","llpEase","llpStrokeDash","_setStyleAttrs","llpStrokeColor","setAttributeNS","llpStrokeOpacity","llpStrokeWidth","llpStrokeCap","llpStrokeJoin","index","_getPathLength","setAttribute","_getStrokeDashArray","startProgress","durationProgress","_this3","_this4","_getProgress","elapsedProgress","_getElapsedProgress","_setLine","_updateStrokeCallbacks","start","elapsed","Easing","round","position","x","left","y","top","pathDelay","ceil","getTotalLength","arr","getPointAtLength","viewBox","svg","document","createElementNS","_getStrokeDashString","dashArray","strokeDashNum","strokeDashRemainder","strokeDashString","strokeDashArray","split","strokeDashTotal","floor","join"],"mappings":"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","file":"lazy-line-painter-1.9.0.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"lazy-line-painter\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"lazy-line-painter\"] = factory();\n\telse\n\t\troot[\"lazy-line-painter\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","\n/*\n *\n * TERMS OF USE - EASING EQUATIONS\n *\n * Open source under the BSD License.\n *\n * Copyright © 2001 Robert Penner\n * All rights reserved.\n *\n */\n\nlet Easing = {\n\n easeLinear(t, b, c, d) {\n return c * t / d + b;\n },\n\n easeInQuad(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n easeOutQuad(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n easeInOutQuad(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t + b;\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n },\n\n easeInCubic(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n\n easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n\n easeInOutCubic(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n },\n\n easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n\n easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n\n easeInOutQuart(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n },\n\n easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n\n easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n\n easeInOutQuint(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n },\n\n easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n\n easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n\n easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n\n easeInExpo(t, b, c, d) {\n return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n },\n\n easeOutExpo(t, b, c, d) {\n return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n\n easeInOutExpo(t, b, c, d) {\n if (t === 0) return b;\n if (t === d) return b + c;\n if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n },\n\n easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n\n easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n\n easeInOutCirc(t, b, c, d) {\n if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n\n easeInBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n\n easeOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n\n easeInOutBack(t, b, c, d, s) {\n if (s === undefined) s = 1.70158;\n if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n },\n\n easeInBounce(t, b, c, d) {\n return c - this.easeOutBounce(d - t, 0, c, d) + b;\n },\n\n easeOutBounce(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n } else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n } else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n }\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n\n },\n\n easeInOutBounce(t, b, c, d) {\n if (t < d / 2) return this.easeInBounce(t * 2, 0, c, d) * 0.5 + b;\n return this.easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n};\n\nexport default Easing;\n","let EventEmitter = {};\n\nEventEmitter.on = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n this._eventEmitterCallbacks[name] = this._eventEmitterCallbacks[name] || [];\n this._eventEmitterCallbacks[name].push(callback);\n};\nEventEmitter.addListener = EventEmitter.on;\n\nEventEmitter.off = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n const i = this._eventEmitterCallbacks[name].indexOf(callback);\n\n if (i < 0) return;\n this._eventEmitterCallbacks[name].splice(i, 1);\n};\nEventEmitter.removeListener = EventEmitter.off;\n\nEventEmitter.emit = function (name, evt) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n for (let callback of this._eventEmitterCallbacks[name]) {\n if (typeof callback !== 'function') return;\n callback(evt);\n }\n};\nEventEmitter.trigger = EventEmitter.emit;\n\nexport default EventEmitter;\n","/*\n * Lazy Line Painter\n * SVG Stroke animation.\n *\n * https://github.com/camoconnell/lazy-line-painter\n * http://www.camoconnell.com\n *\n * Copyright 2013-2018 Cam O'Connell\n * All rights reserved.\n *\n * Licensed under the MIT license.\n *\n */\n\nimport Events from './events';\nimport Easing from './easing';\n\nclass LazyLinePainter {\n\n /**\n * init\n * Responsible for caching user options,\n * @public\n * @param {object} opts user defined options\n */\n\n constructor(el, config) {\n\n this.el = el;\n this.config = Object.assign({\n\n paths: [],\n\n strokeWidth: null,\n strokeDash: null,\n strokeColor: null,\n strokeOverColor: null,\n strokeCap: null,\n strokeJoin: null,\n strokeOpacity: null,\n\n delay: 0,\n ease: null,\n drawSequential: false,\n speedMultiplier: 1,\n reverse: false,\n paused: false,\n progress: 0,\n\n longestDuration: 0,\n playhead: 0,\n log: true\n\n }, config, {});\n Object.assign(this, Events, {});\n\n this.__raf = null;\n\n let paths;\n let composed = Boolean(this.el.dataset.llpComposed);\n\n if (composed) {\n paths = this.el.querySelectorAll('[data-llp-id]');\n } else {\n paths = this.uncomposed();\n }\n\n let i;\n\n for (i = 0; i < paths.length; i++) {\n this.config.paths.push({\n el: paths[i]\n });\n }\n\n this.className = 'lazy-line-painter';\n this.el.classList.add(this.className);\n\n this._parseDataAttrs();\n this._updateDuration();\n this._setupPaths();\n\n this.resize();\n }\n\n uncomposed() {\n let paths = this.el.querySelectorAll('path, polygon, circle, ellipse, polyline, line, rect');\n let i;\n\n for (i = 0; i < paths.length; i++) {\n let id = this.el.id.replace(/ /g, '');\n\n id = id.replace('.', '');\n id = id.replace('-', '');\n paths[i].dataset.llpId = id + '-' + i;\n paths[i].dataset.llpDuration = 5000;\n paths[i].dataset.llpDelay = 0;\n }\n\n if (this.config.log) {\n console.log('This lazy line is uncomposed! Visit http://lazylinepainter.info to compose your masterpiece!');\n }\n\n return paths;\n }\n\n /**\n * paint\n * Responsible for drawing path.\n * @public\n */\n paint() {\n\n this.erase();\n\n // begin animation\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n\n // fire onStart callback\n // if (this.config.onStart !== null) {\n // this.config.onStart();\n // }\n this.emit('start');\n }\n\n /**\n * pause\n * Responsible for pausing path animation.\n * @public\n */\n pause() {\n if (!this.config.paused) {\n this.config.paused = true;\n cancelAnimationFrame(this.__raf);\n }\n }\n\n /**\n * resume\n * Responsible for resuming path animation.\n * @public\n */\n resume() {\n if (this.config.paused) {\n requestAnimationFrame((timestamp) => {\n this.adjustStartTime(timestamp);\n });\n this.config.paused = false;\n }\n }\n\n /**\n * erase\n * Responsible for clearing path,\n * paint can still be called on the element after it has been erased.\n * @public\n */\n erase() {\n\n // reset / cancel rAF\n this.config.startTime = null;\n this.config.elapsedTime = null;\n cancelAnimationFrame(this.__raf);\n\n // reset callback\n this.config.onStrokeCompleteDone = false;\n\n // reset paused\n this.config.paused = false;\n\n // empty contents of svg\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.style.strokeDashoffset = path.length;\n path.onStrokeCompleteDone = false;\n path.onStrokeStartDone = false;\n }\n }\n\n /**\n * destroy\n * Responsible for removing lazyline data and element from DOM\n * @public\n */\n destroy() {\n\n // retrieve / remove data object\n this.config = null;\n\n // remove class\n this.el.classList.remove(this.className);\n\n // empty container element\n this.el.remove();\n this.el = null;\n\n }\n\n /**\n * set\n * @public\n */\n set(prop, value) {\n switch (prop) {\n case 'progress':\n this._setProgress(value);\n break;\n case 'delay':\n this._setDelay(value);\n break;\n default:\n if (this.config.log) {\n console.log('property ' + prop + ' can not be set');\n }\n }\n }\n\n _setProgress(progress) {\n this.config.progress = progress;\n this._updatePaths();\n }\n\n _setDelay(delay) {\n this.config.delay = delay;\n this._updateDuration();\n this._setupPaths();\n }\n\n _updateDuration() {\n\n let totalDuration = this._getTotalDuration(this.config.paths);\n let longestDuration = this._getLongestDuration(this.config.paths);\n\n this.config.totalDuration = this.config.drawSequential ? totalDuration : longestDuration;\n this.config.totalDuration *= this.config.speedMultiplier;\n this.config.totalDuration += this.config.delay;\n }\n\n /**\n * get\n * @public\n */\n get() {\n return this.config;\n }\n\n /**\n * resize\n * @public\n */\n resize() {\n\n this.config.offset = this.el.getBoundingClientRect();\n // this.config.scale = this.config.offset.width / this.config.width;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.el.getBoundingClientRect();\n path.positions = this._getPathPoints(path.el, path.length);\n this._updatePosition(path);\n }\n }\n\n _parseDataAttrs() {\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n\n path.id = path.el.dataset.llpId;\n path.delay = Number(path.el.dataset.llpDelay) || 0;\n path.duration = Number(path.el.dataset.llpDuration) || 0;\n path.reverse = Number(path.el.dataset.llpReverse) || false;\n path.ease = Number(path.el.dataset.llpEase) || null;\n path.strokeDash = path.el.dataset.llpStrokeDash || null;\n this._setStyleAttrs(path);\n }\n }\n\n _setStyleAttrs(path) {\n path.strokeColor = (path.el.dataset.llpStrokeColor || this.config.strokeColor);\n if (path.strokeColor) {\n path.el.setAttributeNS(null, 'stroke', path.strokeColor);\n }\n\n path.strokeOpacity = (path.el.dataset.llpStrokeOpacity || this.config.strokeOpacity);\n if (path.strokeOpacity) {\n path.el.setAttributeNS(null, 'stroke-opacity', path.strokeOpacity);\n }\n\n path.strokeWidth = (path.el.dataset.llpStrokeWidth || this.config.strokeWidth);\n if (path.strokeWidth) {\n path.el.setAttributeNS(null, 'stroke-width', path.strokeWidth);\n }\n\n path.strokeCap = (path.el.dataset.llpStrokeCap || this.config.strokeCap);\n if (path.strokeCap) {\n path.el.setAttributeNS(null, 'stroke-linecap', path.strokeCap);\n }\n\n path.strokeJoin = (path.el.dataset.llpStrokeJoin || this.config.strokeJoin);\n if (path.strokeJoin) {\n path.el.setAttributeNS(null, 'stroke-linejoin', path.strokeJoin);\n }\n }\n\n _setupPaths() {\n\n let startTime = this.config.reverse ? this.config.totalDuration : 0;\n\n for (let i = 0; i < this.config.paths.length; i++) {\n\n let path = this.config.paths[i];\n\n path.progress = 0;\n path.index = i;\n path.length = this._getPathLength(path.el);\n path.positions = this._getPathPoints(path.el, path.length);\n\n path.el.setAttribute('stroke-dasharray', this._getStrokeDashArray(path, path.length));\n path.el.setAttribute('stroke-dashoffset', path.length);\n path.el.getBoundingClientRect();\n\n path.onStrokeStartDone = false;\n path.onStrokeCompleteDone = false;\n\n let startProgress;\n let durationProgress = path.duration / this.config.totalDuration;\n\n if (this.config.reverse) {\n startTime -= path.duration;\n startProgress = startTime / this.config.totalDuration;\n } else {\n if (this.config.drawSequential) {\n startTime = this.config.playhead + this.config.delay;\n } else {\n startTime = path.delay + this.config.delay;\n }\n startProgress = startTime / this.config.totalDuration;\n }\n\n path.startTime = startTime;\n path.startProgress = startProgress;\n path.durationProgress = durationProgress;\n this.config.playhead += (path.duration + path.delay);\n }\n }\n\n /**\n * adjustStartTime\n * Responsible for managing time.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n adjustStartTime(timestamp) {\n this.config.startTime = timestamp - this.config.elapsedTime;\n requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n }\n\n /**\n * _paint\n * Responsible for animating paths.\n * Path incrementation is performed using requestAnimationFrame.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n _paint(timestamp) {\n\n if (!this.config) {\n return;\n }\n\n // set startTime\n if (!this.config.startTime) {\n this.config.startTime = timestamp;\n }\n\n this.emit('update');\n\n // set elapsedTime\n this.config.elapsedTime = (timestamp - this.config.startTime);\n this.config.progress = this._getProgress(\n this.config.totalDuration,\n this.config.startTime,\n this.config.elapsedTime,\n this.config.ease\n );\n\n this._updatePaths();\n\n if (this.config.progress < 1) {\n this.__raf = requestAnimationFrame((timestamp) => {\n this._paint(timestamp);\n });\n } else {\n this.emit('complete');\n }\n }\n\n _updatePaths() {\n for (let i = 0; i < this.config.paths.length; i++) {\n let path = this.config.paths[i];\n let elapsedProgress = this._getElapsedProgress(path);\n\n path.progress = this._getProgress(1, 0, elapsedProgress, path.ease);\n this._setLine(path);\n this._updatePosition(path);\n this._updateStrokeCallbacks(path);\n }\n }\n\n _getElapsedProgress(path) {\n\n let elapsedProgress;\n\n if (\n this.config.progress > path.startProgress &&\n this.config.progress < (path.startProgress + path.durationProgress)\n ) {\n elapsedProgress = (this.config.progress - path.startProgress) / path.durationProgress;\n } else if (this.config.progress >= (path.startProgress + path.durationProgress)) {\n elapsedProgress = 1;\n } else if (this.config.progress <= path.startProgress) {\n elapsedProgress = 0;\n }\n\n return elapsedProgress;\n }\n\n _getProgress(duration, start, elapsed, ease) {\n\n let progress;\n\n if (elapsed > 0 && elapsed < duration) {\n if (ease) {\n progress = Easing[ease](elapsed, 0, 1, duration);\n } else {\n progress = elapsed / duration;\n }\n } else if (elapsed >= duration) {\n progress = 1;\n } else if (elapsed <= start) {\n progress = 0;\n }\n\n return progress;\n }\n\n _setLine(path) {\n\n let el = path.el;\n let length = path.progress * path.length;\n\n if (this.config.reverse || path.reverse) {\n el.style.strokeDashoffset = -path.length + length;\n } else {\n el.style.strokeDashoffset = path.length - length;\n }\n }\n\n _updateStrokeCallbacks(path) {\n\n if (path.progress === 1) {\n\n if (!path.onStrokeCompleteDone) {\n path.onStrokeCompleteDone = true;\n\n this.emit('complete:' + path.id, path);\n this.emit('complete:all', path);\n }\n\n } else if (path.progress > 0.00001) {\n\n if (!path.onStrokeStartDone) {\n this.emit('start:' + path.id, path);\n this.emit('start:all', path);\n path.onStrokeStartDone = true;\n }\n\n this.emit('update:' + path.id, path);\n this.emit('update:all', path);\n }\n }\n\n /**\n * _updatePosition\n * Responsible for updating the paths x / y position.\n * @private\n */\n _updatePosition(path) {\n let index = Math.round((path.progress * (path.length - 1)));\n let position = path.positions[index];\n\n path.position = {\n x: this.config.offset.left + position.x,\n y: this.config.offset.top + position.y\n };\n }\n\n _getTotalDuration(paths) {\n let totalDuration = 0;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n totalDuration += (paths[i].duration + pathDelay);\n }\n\n return totalDuration;\n }\n\n _getLongestDuration(paths) {\n let longestDuration = 0;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n if ((paths[i].duration + pathDelay) > longestDuration) {\n longestDuration = (paths[i].duration + pathDelay);\n }\n }\n return longestDuration;\n };\n\n /**\n * _getPathLength\n * Responsible for returning a svg path length.\n * @return {number} path length\n */\n _getPathLength(el) {\n return Math.ceil(el.getTotalLength());\n }\n\n /**\n * _getPathPoints\n * Responsible for returning a svg path coords.\n * @return {array} path coords\n */\n _getPathPoints(el, length) {\n\n let arr = [];\n\n for (let i = 0; i < length; i++) {\n let position = el.getPointAtLength(i);\n\n arr.push({\n x: position.x,\n y: position.y\n });\n };\n return arr;\n }\n\n /**\n * _getSVGElement\n * Returns empty svg element with specified viewBox aspect ratio.\n * @private\n * @param {string} viewBox\n * @return {obj} jquery wrapped svg el\n */\n _getSVGElement(viewBox) {\n let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n svg.setAttributeNS(null, 'viewBox', viewBox);\n svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n return svg;\n };\n\n /**\n * _getStrokeDashArray\n * @private\n */\n _getStrokeDashArray(path, length) {\n let strokeDash;\n\n if (path.strokeDash) {\n strokeDash = this._getStrokeDashString(path.strokeDash, length);\n } else if (this.config.strokeDash) {\n strokeDash = this._getStrokeDashString(this.config.strokeDash, length);\n } else {\n strokeDash = length + ' ' + length;\n };\n return strokeDash;\n }\n\n /**\n * _getStrokeDashString\n * @private\n */\n _getStrokeDashString(dashArray, length) {\n let strokeDashString = '';\n let strokeDashArray = dashArray.split(',');\n let strokeDashTotal = 0;\n let strokeDashNum;\n let strokeDashRemainder;\n\n for (let i = strokeDashArray.length - 1; i >= 0; i--) {\n strokeDashTotal += Number(strokeDashArray[i]);\n };\n strokeDashNum = Math.floor(length / strokeDashTotal);\n strokeDashRemainder = length - (strokeDashNum * strokeDashTotal);\n for (let i = strokeDashNum - 1; i >= 0; i--) {\n strokeDashString += (dashArray + ', ');\n };\n let preArray = strokeDashString + strokeDashRemainder + ', ' + length;\n\n return preArray.split(',').join('px,') + 'px';\n }\n\n}\nwindow.LazyLinePainter = LazyLinePainter;\nexport default LazyLinePainter;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/index.js b/src/index.js index 717690a..e6434d0 100644 --- a/src/index.js +++ b/src/index.js @@ -49,7 +49,9 @@ class LazyLinePainter { longestDuration: 0, playhead: 0, - log: true + log: true, + offset: this.el.getBoundingClientRect(), + initialised: false }, config, {}); Object.assign(this, Events, {}); @@ -75,15 +77,11 @@ class LazyLinePainter { this.className = 'lazy-line-painter'; this.el.classList.add(this.className); - this._parseDataAttrs(); - let totalDuration = this.config.delay + this._getTotalDuration(this.config.paths); - let longestDuration = this.config.delay + this._getLongestDuration(this.config.paths); - this.config.totalDuration = this.config.drawSequential ? totalDuration : longestDuration; - this.config.totalDuration *= this.config.speedMultiplier; - this._setupPaths(); + this._parseDataAttrs(); + this._updateDuration(); - this.resize(); + this._initialised = this._setupPaths(); } uncomposed() { @@ -112,20 +110,22 @@ class LazyLinePainter { * Responsible for drawing path. * @public */ + paint() { - this.erase(); + return this._initialised.then(() => { - // begin animation - this.__raf = requestAnimationFrame((timestamp) => { - this._paint(timestamp); - }); + this.erase(); + + // begin animation + this.__raf = requestAnimationFrame((timestamp) => { + this._paint(timestamp); + }); - // fire onStart callback - // if (this.config.onStart !== null) { - // this.config.onStart(); - // } - this.emit('start'); + // fire onStart callback + this.emit('start'); + + }); } /** @@ -206,12 +206,41 @@ class LazyLinePainter { * set * @public */ - set(progress) { - // set elapsedTime + set(prop, value) { + switch (prop) { + case 'progress': + this._setProgress(value); + break; + case 'delay': + this._setDelay(value); + break; + default: + if (this.config.log) { + console.log('property ' + prop + ' can not be set'); + } + } + } + + _setProgress(progress) { this.config.progress = progress; this._updatePaths(); } + _setDelay(delay) { + this.config.delay = delay; + this._updateDuration(); + } + + _updateDuration() { + + this.config.totalDuration = this.config.drawSequential ? this._getTotalDuration() : this._getLongestDuration(); + this.config.totalDuration += this.config.delay; + + console.log(this.config.totalDuration); + + this._calcPathDurations(); + } + /** * get * @public @@ -247,13 +276,19 @@ class LazyLinePainter { path.duration = Number(path.el.dataset.llpDuration) || 0; path.reverse = Number(path.el.dataset.llpReverse) || false; path.ease = Number(path.el.dataset.llpEase) || null; - path.strokeDash = path.el.dataset.llpStrokeDash || null; + // path.strokeDash = path.el.dataset.llpStrokeDash || null; + + path.delay *= this.config.speedMultiplier; + path.duration *= this.config.speedMultiplier; + this._setStyleAttrs(path); } } _setStyleAttrs(path) { + path.strokeColor = (path.el.dataset.llpStrokeColor || this.config.strokeColor); + if (path.strokeColor) { path.el.setAttributeNS(null, 'stroke', path.strokeColor); } @@ -279,45 +314,53 @@ class LazyLinePainter { } } - _setupPaths() { + _setupPaths(resolve, reject) { - let startTime = this.config.reverse ? this.config.totalDuration : 0; + return new Promise((resolve, reject) => { - for (let i = 0; i < this.config.paths.length; i++) { + for (let i = 0; i < this.config.paths.length; i++) { - let path = this.config.paths[i]; + let path = this.config.paths[i]; - path.progress = 0; - path.index = i; - path.length = this._getPathLength(path.el); - path.positions = this._getPathPoints(path.el, path.length); + path.index = i; + path.length = this._getPathLength(path.el); + path.positions = this._getPathPoints(path.el, path.length); - path.el.style.strokeDasharray = this._getStrokeDashArray(path, path.length); - path.el.style.strokeDashoffset = path.length; - path.el.getBoundingClientRect(); + path.el.style.strokeDashoffset = path.length; + path.el.style.strokeDasharray = path.length; - path.onStrokeStartDone = false; - path.onStrokeCompleteDone = false; + path.onStrokeStartDone = false; + path.onStrokeCompleteDone = false; + } + + resolve(); + + }); + + }; + + _calcPathDurations() { + let startTime = this.config.reverse ? this.config.totalDuration : this.config.delay; - let startProgress; - let durationProgress = path.duration / this.config.totalDuration; + for (let i = 0; i < this.config.paths.length; i++) { + + let path = this.config.paths[i]; + + path.progress = 0; if (this.config.reverse) { startTime -= path.duration; - startProgress = startTime / this.config.totalDuration; } else { if (this.config.drawSequential) { - startTime = this.config.playhead + this.config.delay; + startTime = 0; } else { - startTime = path.delay + this.config.delay; + startTime = path.delay; } - startProgress = startTime / this.config.totalDuration; } path.startTime = startTime; - path.startProgress = startProgress; - path.durationProgress = durationProgress; - this.config.playhead += (path.duration + path.delay); + path.startProgress = (path.startTime / this.config.totalDuration); + path.durationProgress = (path.duration / this.config.totalDuration); } } @@ -377,11 +420,12 @@ class LazyLinePainter { } _updatePaths() { + for (let i = 0; i < this.config.paths.length; i++) { let path = this.config.paths[i]; let elapsedProgress = this._getElapsedProgress(path); - path.progress = this._getProgress(1, 0, elapsedProgress, path.ease); + path.progress = this._getProgress(1, 0, elapsedProgress, path.ease, path); this._setLine(path); this._updatePosition(path); this._updateStrokeCallbacks(path); @@ -393,8 +437,8 @@ class LazyLinePainter { let elapsedProgress; if ( - this.config.progress > path.startProgress && - this.config.progress < (path.startProgress + path.durationProgress) + this.config.progress >= path.startProgress && + this.config.progress <= (path.startProgress + path.durationProgress) ) { elapsedProgress = (this.config.progress - path.startProgress) / path.durationProgress; } else if (this.config.progress >= (path.startProgress + path.durationProgress)) { @@ -406,8 +450,7 @@ class LazyLinePainter { return elapsedProgress; } - _getProgress(duration, start, elapsed, ease) { - + _getProgress(duration, start, elapsed, ease, path) { let progress; if (elapsed > 0 && elapsed < duration) { @@ -476,8 +519,9 @@ class LazyLinePainter { }; } - _getTotalDuration(paths) { + _getTotalDuration() { let totalDuration = 0; + let paths = this.config.paths; for (let i = 0; i < paths.length; i++) { let pathDelay = paths[i].delay || 0; @@ -488,14 +532,15 @@ class LazyLinePainter { return totalDuration; } - _getLongestDuration(paths) { + _getLongestDuration() { let longestDuration = 0; + let paths = this.config.paths; for (let i = 0; i < paths.length; i++) { - let pathDelay = paths[i].delay || 0; + let pathTotalDuration = paths[i].delay + paths[i].duration; - if ((paths[i].duration + pathDelay) > longestDuration) { - longestDuration = (paths[i].duration + pathDelay); + if (pathTotalDuration > longestDuration) { + longestDuration = pathTotalDuration; } } return longestDuration; @@ -530,21 +575,6 @@ class LazyLinePainter { return arr; } - /** - * _getSVGElement - * Returns empty svg element with specified viewBox aspect ratio. - * @private - * @param {string} viewBox - * @return {obj} jquery wrapped svg el - */ - _getSVGElement(viewBox) { - let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - - svg.setAttributeNS(null, 'viewBox', viewBox); - svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); - return svg; - }; - /** * _getStrokeDashArray * @private