В следующем коде showLoader
является первым вызовом, но все равно loader
не появляется, и причина в том, что heavyLifting
блокирует поток пользовательского интерфейса.
function onClick() {
showLoader();
console.log(heavyLifting());
hideLoader();
}
function showLoader() {
$('#loader').show();
}
function hideLoader() {
$('#loader').hide();
}
function heavyLifting() {
var num = 0;
console.log('started heavyLifting');
for (var i = 0; i < 100000000; ++i) {
num += Math.random();
}
console.log('finished heavyLifting');
return num;
}
.hourglass-background {
position: fixed;
background: rgba(250,250,250,0.8);
width: 100%;
height: 100%;
z-index: 99;
}
.hourglass {
position: absolute;
top: 40%;
left: 48%;
transform: translate(50%, -50%);
z-index: 100;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="loader" style="display: none">
<span class="hourglass-background"></span>
<span class="hourglass">⌛</span>
</div>
<div>
<button onclick="onClick()">click me</button>
</div>
Я хочу, чтобы loader
появился сразу и подумал, что прохождение { queue: false }
поможет, как говорят документы :
Если false, анимация начнется немедленно
, но она не работает:
$('#loader').show({ queue: false }); // loader still won't appear immidiately
Почему?