JSFiddle - React, Tailwind, and code Playground

jQuery Animated Bars

by Jennifer Perrin

HTML

<div class="bars">
    <div id="bar-1"></div>
    <div id="bar-2"></div>
    <div id="bar-3"></div>
    <div id="bar-4"></div>
    <div id="bar-5"></div>
    <div id="bar-6"></div>
</div>

CSS

.jqbar {
    position: relative;
    top: 10px;
}
.jqbar.vertical {
    text-align: center;
    display: inline-block;
}
.jqbar.vertical span {
    display: block;
    font-size: 11px;
    font-weight: bold;
}
.jqbar.vertical .bar-percent {
    font-size: 11px;
    font-weight: bold;
    position: absolute;
    height: 20px;
    margin-bottom: 5px;
    width: 100%;
}
.jqbar.vertical .bar-level-wrapper {
    position: relative;
    display: inline-block;
    overflow: hidden;
}
.jqbar.vertical .bar-level {
    position: absolute;
}
/*horizontal*/
 .jqbar.horizontal span {
    display: inline-block;
    margin-left: 5px;
    font-size: 11px;
    font-weight: bold;
}
.jqbar.horizontal .bar-percent {
    font-size: 11px;
    font-weight: bold;
    height: 20px;
    margin-bottom: 5px;
}
.jqbar.horizontal .bar-comment {
    font-size: 11px;
    font-weight: bold;
    height: 20px;
    margin-bottom: 5px;
}

.bar-label { min-width: 70px; text-align: right; }

JavaScript

(function ($) {
    $.fn.extend({
        jqbar: function (options) {
            var settings = $.extend({
                animationSpeed: 2000,
                barLength: 300,
                barWidth: 20,
                barColor: 'red',
                label: '&nbsp;',
                value: 100,
                comment: 'bohb'
            }, options);

            return this.each(function () {

                var valueLabelHeight = 0;
                var progressContainer = $(this);

                progressContainer.addClass('jqbar horizontal').append('<span class="bar-label"></span><span class="bar-level-wrapper"><span class="bar-level"></span></span><span class="bar-percent"></span><span class="bar-comment"></span>');

                var progressLabel = progressContainer.find('.bar-label').html(settings.label);
                var progressBar = progressContainer.find('.bar-level').attr('data-value', settings.value);
                var progressBar = progressContainer.find('.bar-level').attr('data-comment', settings.comment);
                var progressBarWrapper = progressContainer.find('.bar-level-wrapper');

                progressBar.css({
                    height: settings.barWidth,
                    width: 0,
                    backgroundColor: settings.barColor
                });

                var valueLabel = progressContainer.find('.bar-percent');
                valueLabel.html('0');
                // Append the Comment to the end of each bar
                var valueLabel = progressContainer.find('.bar-comment');
                valueLabel.html(settings.comment);

                animateProgressBar(progressBar);

                function animateProgressBar(progressBar) {
                    var level = parseInt(progressBar.attr('data-value'));
                    if (level > 100) {
                        level = 100;
                        alert('max value cannot exceed 100 percent');
                    }
                   ...