如何显示一个繁忙的指示器长非ajax操作
How to show a busy indicator for a long non-ajax operation?
我有一个在客户端上运行2-3秒的函数(没有ajax调用)。当这个操作正在运行时,我试图显示一个"繁忙/正在处理"动画。
简化代码如下:
var ajaxContainer = $('.spinner');
// show
$(ajaxContainer ).show();
// long operation
var items = GetItems();
$.each(items, function (index, value) {
ProcessItem(value.itemID);
});
// hide
$(ajaxContainer ).hide();
,但这并没有像预期的那样工作。我得到的结果是操作运行时没有显示旋转器。尽管它确实显示操作何时结束。
我在网上看到一些帖子提到这可以通过使用windows.setTimeout()来完成。但是,由于此操作是基于动态数量的项,因此我不希望提前设置特定的超时数。相反,我想在操作开始时显示旋转器,并在操作完成时隐藏它。
是否有一种优雅的方式来实现这一点?
我认为你必须为ProcessItem
函数添加一个回调参数,以便检查是否所有项都已处理。试试这样:
function ProcessItem(id, callback){
//do process and after call callback function
callback();
}
var processedItemsQuantity = 0;
var ajaxContainer = $('.spinner');
ajaxContainer.show();
// long operation
var items = GetItems();
$.each(items, function (index, value) {
ProcessItem(value.itemID, function(){
if (items.length - 1 == processedItemsQuantity){
ajaxContainer.hide();
}
else processedItemsQuantity++;
});
});
你不能在同步操作中显示旋转器,因为它阻塞了UI (ajax是异步的,这就是它工作的原因)。
你需要的是把你的代码放到一个Web Worker中。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何确定javascript已经完成了某些操作.ios上的
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 从JavaScript访问struts操作中的属性
- fluxxor向一个flux实例添加一组以上的操作
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 操作放置在画布上的元素之间的连接
- 使用“+="操作人员
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Jquery未定义函数正在停止其他操作
- 如何操作iframe之外的元素
- javascript对象操作:根据指定条件选择属性
- jQuery:暂停按钮可以暂停所有其他操作
- 用于选择/文本框操作的JavaScript
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 手动创建旋转活动指示器
- 如何为angularjs应用程序中的每个异步操作(使用$q)制作加载指示器
- 如何显示一个繁忙的指示器长非ajax操作
- 在带有 http 请求操作的按钮上显示指示器的 Angular 方式是什么?