bs4 alpha Dynamic Loading progress Bar

Bootstrap snippet. bs4 alpha Dynamic Loading progress Bar, this snippet was created to help web designers,
front-end developers and back-end developer save time. Use it in your project and build your app faster,
You can also download the HTML, CSS, and JS code.
tags: loading,progress,percentage,progressbar,loader

HTML code

Copy, paste, change, customize and run the following HTML code to get a result like the one shown in the preview selection



<div class="container">
  <div class="text-xs-center" id="example-caption-1">Reticulating splines&hellip; <span id="percentage" class="tag tag-default">0</span>%</div>

  <div class="parent">
    <progress class="progress progress-striped" value="0" max="100"></progress>
    <div class="child">
      <div class="btn-group" role="group" aria-label="First group">
        <button type="button" class="btn btn-outline-secondary" value="25" name="success">25%</button>
        <button type="button" class="btn btn-outline-secondary" value="50" name="info">50%</button>
        <button type="button" class="btn btn-outline-secondary" value="75" name="warning">75%</button>
        <button type="button" class="btn btn-outline-secondary" value="100" name="danger">100%</button>
      </div>
    </div>
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.2/js/tether.min.js"></script>

CSS code

Copy, paste, change, customize and run the following CSS code to get a result Like the one shown in the preview selection

body{
    background:#eee;    
}

.progress {
  height: 2.3em;
  margin-bottom: 0;
}
.btn-group {
  width: calc(100% + 3px);
}
.btn-group > .btn {
  width: 25%;
}
.btn-group > .btn:focus {
  outline: none;
  background-color: transparent;
}
.parent {
  position: relative;
  width: 100%;
  background:#fff;
}
.child {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 1;
  width: 100%;
}

                                    

Javascript/Jquery code

Copy, paste, change, customize and run the following JS code to get a result Like the one shown in the preview selection


$.fn.removeClassMatch = function(rexp) {
  return $(this).removeClass((i, className) => {
    return (className.match(rexp) || []).join(' ');
  })
}

let progressQueue = limit => {
  controlButton(true);
  
  for (let v = 0; v <= limit; v++) {
    $('progress').delay(50).queue(function() {
      $('#percentage').text(`${v}`);
      $(this).val(`${v}`).dequeue();
      // console.log($(this).queue().length);
      if ($(this).queue().length === 0) {
        controlButton(false);
      }
    })
  }
}

let controlButton = flg => {
  $button = $('button');
  $button.css({ 'color': 'white' });
  $button.prop('disabled', flg);
}

let addClassToProgress = name => {
  let $progress = $('progress');
  $progress.removeClassMatch(/progress-.+/g)
    .addClass(`progress-striped progress-${name}`);
}

let addClassToButtons = name => {
  let $button = $('button');
  $button.removeClassMatch(/btn-outline-.+/g)
    .addClass(`btn-outline-${name}`);
}

let addClassToTag = name => {
  let $tag = $('.tag');
  $tag.removeClassMatch(/tag-.+/g)
    .addClass(`tag-${name}`);
}

$('button').on('click', function() {
  let [type, limit] = [$(this).attr('name'), parseInt($(this).val())];
  
  addClassToProgress(type);
  addClassToButtons(type);
  addClassToTag(type);
  progressQueue(limit);
}) 

Similar snippets

Bootstrap snippet bs4 project list with progress

bs4 project list with progress

View

Bootstrap snippet infinite page loader

infinite page loader

View

Bootstrap snippet page loader

page loader

View

About this snippet

Creator: Dey Dey

Bootstrap version: 4.0.0-alpha.5

Created: Mar 1st 2018, 13:15

Views: 2.1K

Rated 5/5 based on 5 reviews