我试图显示一个加载的GIF,而算法运行约5秒。
我运行$('#loading-container')。show()在函数的开始(在算法运行之前)和$('#loading-container')。hide(),但什么都不显示。如果我在隐藏上设置了超时,那么一旦算法完成,我就可以看到gif正在运行。我还尝试了不同的方法来测试代码是否正在运行,例如替换具有相同问题的div上的文本,它只在算法运行后更新。
有谁知道为什么它没有展示出来吗?我想象所有的屏幕更改都在算法运行结束时被处理,gif立即被隐藏。
function mycode() {
$('#loading-container').show()
// do lots of code
$('#loading-container').hide()
}
// this code will show the gif
function mycode() {
$('#loading-container').show()
// do lots of code
setTimeout(function() {
$('#loading-container').hide()
}, 5000);
}
CSS
#loading-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
margin: 0;
z-index: 9998;
}
.loading {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 9999;
}
.loading img {
display: block;
margin: 0 auto;
height: 100px;
}
HTML
<div id="loading-container" style="display: none;">
<div class="loading">
<img src="assets/loading-buffering.gif" alt="Loading...">
</div>
</div>
1条答案
按热度按时间ghhaqwfi1#
这是因为浏览器在主线程中同步执行这些操作。你可以尝试使用
requestAnimationFrame
在一个绘制周期后运行你的同步代码:(The我们需要调用两次而不是一次的原因是因为
requestAnimationFrame
在下一次重新绘制发生之前回调,所以我们需要确保loading-container
有机会首先重新绘制。第二次调用确保第一次重新绘制已完成)