У меня была такая же проблема, распространенная и в других браузерах, таких как Firefox. Наконец, я обнаружил, что динамическое создание элемента с анимированным gif внутри при отправке формы не анимируется, поэтому я разработал следующий метод.
1) В document.ready()
каждая ФОРМА, найденная на странице, получает свойство position:relative
, а затем к каждому прикрепляется невидимая DIV.bg-overlay
.
2) После этого, предполагая, что каждое значение отправки моего сайта идентифицируется классом btn-primary
css, снова на document.ready()
, я ищу эти кнопки, перехожу к родителю FORM каждого из них и при отправке формы Я запускаю функцию showOverlayOnFormExecution(this,true);
, передавая нажатую кнопку и логическое значение, которое переключает видимость DIV.bg-overlay
.
$(document).ready(function() {
//Append LOADING image to all forms
$('form').css('position','relative').append('<div class="bg-overlay" style="display:none;"><img src="/images/loading.gif"></div>');
//At form submit, fires a specific function
$('form .btn-primary').closest('form').submit(function (e) {
showOverlayOnFormExecution(this,true);
});
});
CSS для DIV.bg-overlay
выглядит следующим образом:
.bg-overlay
{
width:100%;
height:100%;
position:absolute;
top:0;
left:0;
background:rgba(255,255,255,0.6);
z-index:100;
}
.bg-overlay img
{
position:absolute;
left:50%;
top:50%;
margin-left:-40px; //my loading images is 80x80 px. This is done to center it horizontally and vertically.
margin-top:-40px;
max-width:auto;
max-height:80px;
}
3) При любой отправке формы запускается следующая функция, чтобы показать полубелое наложение фона на всем протяжении (которое лишает возможности снова взаимодействовать с формой) и анимированный GIF внутри (которое визуально показывает действие загрузки) .
function showOverlayOnFormExecution(clicked_button, showOrNot)
{
if(showOrNot == 1)
{
//Add "content" of #bg-overlay_container (copying it) to the confrm that contains clicked button
$(clicked_button).closest('form').find('.bg-overlay').show();
}
else
$('form .bg-overlay').hide();
}
Отображение анимированного GIF-файла при отправке формы, вместо добавления его в этом событии, решает проблему «зависания GIF-анимации» в различных браузерах (как уже говорилось, я обнаружил эту проблему в IE и Firefox, а не в Chrome )