Я ненавижу представлять другую библиотеку только для одной функции, поэтому я сам ее реализовал, используя только jQuery, JavaScript и Bootstrap 3.
Когда я нажимаю кнопку, мой код добавляет модальную блокировку в таблицу, делает вызов ajax и ждет 0,5 секунды, затем разблокирует, чтобы показать вращающийся GIF (потому что это может быть слишком быстро, чтобы заметить).Спасибо за @NaveedButt, я нашел https://icons8.com/preloaders/ для создания GIF с цветом темы моего сайта.
Модал Throbber: (GIF по центру по горизонтали и вертикали)
<div id="throbber" class="modal" role="dialog" style="display:none; position:relative; opacity:0.6; background-color:white;">
<img style="margin: 0 auto;
position: absolute;
top: 0; bottom: 0; left:0; right:0;
margin: auto;
display: block;
" src="/static/images/spinning.gif" />
</div>
Кнопка:
<div class="row">
<div class="col-lg-12">
<div class="pull-right">
<button type="button" id="reload" class="btn btn-primary pull-right-button" style="width: 120px;">Reload</button>
</div>
</div>
</div>
JavaScript + jQuery:
function block() {
var body = $('#panel-body');
var w = body.css("width");
var h = body.css("height");
var trb = $('#throbber');
var position = body.offset(); // top and left coord, related to document
trb.css({
width: w,
height: h,
opacity: 0.7,
position: 'absolute',
top: position.top,
left: position.left
});
trb.show();
}
function unblock() {
var trb = $('#throbber');
trb.hide();
}
$(document).ready(function(){
$('#reload').click(function(){
block();
$.ajax({
type: "GET",
url: "{% url 'scriptsList'%}",
async: false
});
setTimeout(function(){
unblock();
}, 500); //wait 0.5 second to see the spinning gif
});
});
Окончательный результат: