Давно хотел сделать так, чтобы при загрузке информации в какой-либо блок (к примеру, AJAX-ом) помимо обычного прелоадера сам блок бы еще размывался.
Собственно пример можно посмотреть здесь: https://jsfiddle.net/va61mk5t/1/
HTML:
<button onclick="start_stop_animation('.text_block');">Запустить/Остановить анимацию загрузки</button>
<div class='text_block'>
Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений. Художественный стиль не был бы самим собой, если бы в нем не было сравнений.
</div>
<div>
Какой то текстовый блок дальше...
</div>
JS:
function loading_animation_start(block){
$(block).wrap( '<div class="main_overlay_block"></div>' );
$('.main_overlay_block').prepend('<div class="overlay_block"></div>');
$(block).addClass('loading_process');
}
function loading_animation_end(block){
$(block).unwrap();
$('.overlay_block').remove();
$(block).removeClass('loading_process');
}
function start_stop_animation(block){
if ($(block).parent().is('.main_overlay_block')){
loading_animation_end(block);
} else {
loading_animation_start(block);
}
}
CSS:
.overlay_block{
position: absolute;
width: 100%;
height: 100%;
background: url(https://web-finder.ru/files/preloader1.gif) center center no-repeat;
z-index: 9999;
}
.loading_process{
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
filter: blur(5px);
}
.main_overlay_block{
position: relative;
}
Для отображения анимации производятся следующие манипуляции:
- создаётся родительский дивник
- в него prepend-ом пихается дивник оверлея с картинкой-прелоадером по центру
- сам блок blur-ится (размывается)
Когда необходимо отключить анимацию загрузки — производим всё в точности наоборот:
- родительский дивник убиваем
- дивник оверлея убиваем
- размытие убираем