Buttons spinner for Twitter Bootstrap
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<button class="btn btn-default has-spinner" id="one">Button1</button>
<button class="btn btn-primary has-spinner" id="two">Button2</button>
<a class="btn btn-success has-spinner" id="three">Button3</a>
<a class="btn btn-warning has-spinner">Button4 </a>
CSS
.spinner {
display: inline-block;
opacity: 0;
width: 0;
-webkit-transition: opacity 0.25s, width 0.25s;
-moz-transition: opacity 0.25s, width 0.25s;
-o-transition: opacity 0.25s, width 0.25s;
transition: opacity 0.25s, width 0.25s;
}
.has-spinner.active {
cursor:progress;
}
.has-spinner.active .spinner {
opacity: 1;
width: auto;
}
.has-spinner.btn.active .spinner {
min-width: 20px;
}
JavaScript
/*A jQuery plugin which add loading indicators into buttons*/
(function ($) {
$.fn.buttonLoader = function (action) {
var self = $(this);
if (action == 'start') {
if ($(self).attr("disabled") == "disabled") {
e.preventDefault();
}
$('.has-spinner').attr("disabled", "disabled");
$(self).attr('data-btn-text', $(self).text());
$(self).html('<span class="spinner"><i class="fa fa-spinner fa-spin"></i></span>Loading');
$(self).addClass('active');
}
if (action == 'stop') {
$(self).html($(self).attr('data-btn-text'));
$(self).removeClass('active');
$('.has-spinner').removeAttr("disabled");
}
}
})(jQuery);
$(document).ready(function () {
$('.has-spinner').click(function () {
var btn = $(this);
$(btn).buttonLoader('start');
setTimeout(function () {
$(btn).buttonLoader('stop');
}, 3000);
});
});