JSFiddle - React, Tailwind, and code Playground
by Andres Abadia
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Draw SVG</title>
<link rel="stylesheet" href="master.css">
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script>
(function(factory) {
/* global define */
if ( typeof define === 'function' && define.amd ) {
define(['jquery'], factory);
} else if ( typeof module === 'object' && module.exports ) {
// Node/CommonJS
module.exports = function( root, jQuery ) {
if ( jQuery === undefined ) {
if ( typeof window !== 'undefined' ) {
jQuery = require('jquery');
} else {
jQuery = require('jquery')(root);
}
}
factory(jQuery);
return jQuery;
};
} else {
// Browser globals
factory(jQuery);
}
}(function($) {
'use strict';
var pluginName = 'drawsvg',
defaults = {
duration: 1000,
stagger: 200,
easing: 'swing',
reverse: false,
callback: $.noop
},
DrawSvg = (function() {
var fn = function fn(elm, options) {
var _this = this,
opts = $.extend(defaults, options);
_this.$elm = $(elm);
if ( !_this.$elm.is('svg') )
return;
_this.options = opts;
_this.$paths = _this.$elm.find('path');
_this.totalDuration = opts.duration + (opts.stagger * _this.$paths.length);
_this.duration = opts.duration / _this.totalDuration;
_this.$paths.each(function(index, elm) {
var pathLength = elm.getTotalLength();
elm.pathLen = pathLength;
elm.delay = (opts.stagger * index) / _this.totalDuration;
elm.style.strokeDasharray = [pathLength, pathLength].join(' ');
elm.style.strokeDashoffset = pathLength;
});
...
CSS
body {
background: #202020;
}
.wrapper {
height: 2000px;
}
svg {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
width: 30%;
}