我使用填充我网站的许多部分
$("#theDivToPopulate").load("/some/api/call.php", callBackToBindClickEventsToNewDiv);
其中 /some/api/call.php 返回一个构建列表、div 或其他一些 HTML 结构以直接放入我的目标 div。互联网最近运行缓慢,我注意到单击按钮(启动这些 API 调用)和填充 div 之间的时间是几秒钟。是否有一种简单的方法可以全局包装所有加载调用,以便在调用之前显示包含“正在加载...”的 div,并在 API 调用完成后隐藏。
我不能简单地将隐藏 div 的代码放入 callBackToBindClickEventsToNewDiv 中,因为某些加载事件具有不同的回调。我将不得不将代码复制到每个丑陋且违背目的的函数中。我希望任何 .load 的流程如下:
1) dispplayLoadingDiv()
2) Execute API call
3) Hide loading div
4) do callback function.
加载 div 必须首先隐藏,因为回调包含一些动画以很好地引入新加载的 div。
编辑:扩展jacktheripper的答案:
var ajaxFlag;
$(document).ajaxStart(function(){
ajaxFlag = true;
setTimeout(function (e) {
if(ajaxFlag) {
hideAllDivs();
enableDivs(['loading']);
}
}, 500);
}).ajaxStop(function(){
ajaxFlag = false;
var load = $("#loading");
load.css('visibility','hidden');
load.css('display','none');
load.data('isOn',false);
});
只有在页面加载时间超过 500 毫秒时才会显示这种加载方式。我发现加载进出非常快,这使得快速页面加载变得不稳定。