【发布时间】:2011-05-20 07:24:35
【问题描述】:
如何在网页的特定位置显示旋转的“忙碌”指示器?
我想在 Ajax 请求开始/完成时启动/停止指示器。
真的只是显示/隐藏动画 gif 的问题,还是有更优雅的解决方案?
【问题讨论】:
标签: javascript jquery
如何在网页的特定位置显示旋转的“忙碌”指示器?
我想在 Ajax 请求开始/完成时启动/停止指示器。
真的只是显示/隐藏动画 gif 的问题,还是有更优雅的解决方案?
【问题讨论】:
标签: javascript jquery
您可以只显示/隐藏一个 gif,但您也可以将其嵌入到 ajaxSetup 中,因此在每个 ajax 请求时都会调用它。
$.ajaxSetup({
beforeSend:function(){
// show gif here, eg:
$("#loading").show();
},
complete:function(){
// hide gif here, eg:
$("#loading").hide();
}
});
需要注意的是,如果您想在没有加载微调器的情况下执行特定的 ajax 请求,您可以这样做:
$.ajax({
global: false,
// stuff
});
这样我们之前的 $.ajaxSetup 不会影响global: false 的请求。
【讨论】:
ajaxSetup()。如果能给出关于global 属性的进一步解释,我会更愿意。
jQuery 文档建议执行以下操作:
$( document ).ajaxStart(function() {
$( "#loading" ).show();
}).ajaxStop(function() {
$( "#loading" ).hide();
});
#loading 是其中包含忙碌指示符的元素。
参考资料:
此外,jQuery.ajaxSetup API 明确建议避免jQuery.ajaxSetup 用于这些:
注意:全局回调函数应该使用它们各自的全局 Ajax 事件处理方法来设置——
.ajaxStart()、.ajaxStop()、.ajaxComplete()、.ajaxError()、.ajaxSuccess()、.ajaxSend()——而不是在 @987654334 @对象为$.ajaxSetup()。
【讨论】:
我倾向于像其他人所说的那样只显示/隐藏 IMG。我找到了一个生成“加载 gif”的好网站
Link
我只是把它放在div 中并默认隐藏display: none; (css) 然后当你调用该函数时显示图像,一旦它完成再次隐藏它。
【讨论】:
是的,这实际上只是显示/隐藏动画 gif 的问题。
【讨论】:
我在我的项目中做到了,
制作一个 div 的背景 url 为 gif ,这不过是动画 gif
<div class="busyindicatorClass"> </div>
.busyindicatorClass
{
background-url///give animation here
}
在您的 ajax 调用中,将此类添加到 div 并在 ajax 成功时删除该类。
它会做到这一点。
如果您还需要其他东西,请告诉我,我可以给您更多详细信息
在ajax成功删除类
success: function(data) {
remove class using jquery
}
【讨论】:
稍微扩展 Rodrigo 的解决方案 - 对于频繁执行的请求,您可能只想在请求花费的时间超过最小时间间隔时才显示加载图像,否则图像将不断弹出并迅速消失
var loading = false;
$.ajaxSetup({
beforeSend: function () {
// Display loading icon if AJAX call takes >1 second
loading = true;
setTimeout(function () {
if (loading) {
// show loading image
}
}, 1000);
},
complete: function () {
loading = false;
// hide loading image
}
});
【讨论】:
我在我的项目中做到了:
全球事件 在 application.js 中:
$(document).bind("ajaxSend", function(){
$("#loading").show();
}).bind("ajaxComplete", function(){
$("#loading").hide();
});
“正在加载”是要显示和隐藏的元素!
【讨论】:
我不得不使用
HTML:
<img id="loading" src="~/Images/spinner.gif" alt="Updating ..." style="display: none;" />
In script file:
// invoked when sending ajax request
$(document).ajaxSend(function () {
$("#loading").show();
});
// invoked when sending ajax completed
$(document).ajaxComplete(function () {
$("#loading").hide();
});
【讨论】:
旧线程,但我想更新,因为我今天正在处理这个问题, 我的项目中没有 jquery,所以我用普通的旧 javascript 方式来做,我还需要阻止屏幕上的内容,所以 在我的 xhtml 中
<img id="loading" src="#{request.contextPath}/images/spinner.gif" style="display: none;"/>
在我的 javascript 中
document.getElementsByClassName('myclass').style.opacity = '0.7'
document.getElementById('loading').style.display = "block";
【讨论】:
XMLHttpRequest?