自定义ajax,添加loading效果
自定义ajax
/**
* @desc 自定义ajax请求,添加等待gif
*/
var n=0;
$.defineAjax=function(obj){
n++;
if(!$('#loadingDiv')[0]){
var str='<div id="loadingDiv"><img class="loadingImg" src="'+path+'/ui/common/img/loading.gif"></div>';
$('body')[0].appendChild($(str)[0]);
}
if(typeof obj.success == 'function'){
var fun=obj.success;
obj.success=function(res){
if($('#loadingDiv')[0]){
$('#loadingDiv').remove();
}
fun(res);
}
}
var opt={
type:'post',
data:{},
dataType:'json',
beforeSend:function(xhr){},
complete:function(xhr,status){
if(--n<=0){
$('#loadingDiv').remove();
}
}
},option={};
if(obj.beforeSend===undefined&&obj.complete===undefined){
option=$.extend({},opt,obj);
}
setTimeout(function(){
$.ajax(option);
},200)
}
关键能耗指标分析
js:
option为ajax里面的参数
$.pageAjax=function(option){
if(!$('div.page-loading')[0]){
$('body').append('<div class="page-loading" style="display:none;"></div>');
}
$('div.page-loading').fadeIn(100);
var op={
type:"post",
DataType:'json'
},fn={
success:function(res,mes){
$('body').find('div.page-loading').fadeOut(100);
if(typeof option.success==='function'){
option.success(res,mes);
}
},
error:function(XHRObj,err,ext){
$('body').find('div.page-loading').fadeOut(100);;
if(typeof option.error==='function'){
option.error(XHRObj,err,ext);
}
}
}
var opt=$.extend({},op,option,fn);
$.ajax(opt);
}
css
div.page-loading{
position: absolute;
top:;bottom:;
left:;right:;
background: url('../img/page_loading.gif') no-repeat center center;
margin:auto;
width:65px;
height:65px;
border-radius: 50%;
}
调用:
$.pageAjax(opt.ajax);
效果:

这种正常来说是ok的,单个请求的时候是不会有问题,但是如果有多个请求在发生,并且之前的请求还没有完成的时候,又进行下一个请求,这样就会存在问题
修改:在每次请求之前记录请求的次数,请求之前加1,请求之后不管成功或者失败都减1,如果为0或者小于0,那么就隐藏loading
js
/*
*ajax loading包装插件
*/
$.pageAjax=function(option){
var op={
type:"post",
DataType:'json'
},fn={
beforeSend:function(){
var el=$('div.page-loading');
if(!el[0]){
$('body').append('<div class="page-loading" data-times="1" style="display:block;"></div>');
}else{
showOrHide(el,'+');
}
//每次只有要请求都要显示
el.fadeIn(100);
},
success:function(res,mes){
showOrHide($('body').find('div.page-loading'),'-');
if(typeof option.success==='function'){
option.success(res,mes);
}
},
error:function(XHRObj,err,ext){
showOrHide($('body').find('div.page-loading'),'-');
if(typeof option.error==='function'){
option.error(XHRObj,err,ext);
}
}
}
var opt=$.extend({},op,option,fn);
$.ajax(opt);
}
function showOrHide(el,p){
var num=el.attr('data-times');
if(isNaN(num)){num=0;}
if(p=='+'){
el.attr('data-times',++num);//注意此处是++num ++i和i++的区别借鉴for循环的例子
}else if(p=='-'){
el.attr('data-times',--num);
if(num<=0){
el.fadeOut(100);
}
}
}
还有一种,直接方式,页面查询数据的时候调用显示的方法,成功或者失败的时候调用隐藏的方法
调用显示:
$("#searchbtn").off("click").on("click","",function(){
$.fn.showorhideLoading.show();
getChecknode();
})
调用隐藏
function postAjaxData(param){
//请求
$.ajax({
url:'/findEnergyDayTypeDataList',
data:param,
dataType:'json',
success:function(data){
$.fn.showorhideLoading.hide();//隐藏loading
//处理数据
var dataObj=initData(data.detail);
},
error:function(){
$.fn.showorhideLoading.hide();//隐藏loading
}
})
}
html
<div class="loading" style="display: none;"><img src="/static/ui/modules/systemMan/demo/img/loading.gif" alt=""></div>
css
/*loading效果*/
.loading{
position:fixed;
top:;
left:;
right:;
bottom:;
width:100%;
height:100%;
background-color: rgba(0,0,0,.5);
z-index:;
}
.loading>img{
position:absolute;
width:40px;
height:40px;
top:;
left:;
right:;
bottom:;
margin:auto;
}
/**
* 控制dialog的显示和隐藏
*/
$.fn.showorhideLoading={
show:function(id){
if(id===undefined){
id="body";
}
//判断是否存在loading
var el=$(id).find(".loading");
if(!el[0]){
$(id).append(
'<div class="loading" style="display: block;">'+
'<img src="/static/ui/modules/systemMan/demo/img/loading.gif" alt="">'+
'</div>'
);
}
el.show()
},
hide:function(id){
if(id===undefined){
id="body";
}
//判断是否存在loading
var el=$(id).find(".loading");
if(el){el.hide()}
}
}

自定义ajax,添加loading效果的更多相关文章
- Vue通过状态为页面切换添加loading、为ajax加载添加loading
以下方法需要引入vuex,另使用了vux的UI框架,ajax添加loading还引入了axios. 一.为页面切换添加loading. loading.js: import Vue from 'vue ...
- DataGrid点击上下一页loading效果
js添加显示loading和取消loading方法 function showtbloading() { var target = $("#GridView1"); if (tar ...
- vue中iframe加载慢,给它加loading效果
js框架:vue ui框架:element 因为iframe加载慢,所以在它加载完成前添加loading效果,loading用的是element家的加载效果 <template> < ...
- vue实现ajax滚动下拉加载,同时具有loading效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 自定义loading效果
结合Font Awesome字体图标自定义loading效果 Font Awesome字体图标地址:http://www.fontawesome.com.cn/faicons/ 使用javascrip ...
- Android动画效果之自定义ViewGroup添加布局动画
前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...
- php+ajax实现登录按钮加载loading效果
php+ajax实现登录按钮加载loading效果,一个提高用户体验,二个避免重复提交表单,ajax判断加载是否完成. 登录表单 <form onsubmit="return chec ...
- JQuery+CSS3实现Ajax加载时loading效果
之前通过Ajax请求加载数据的时候,在数据还没有呈现出来前,为了更好的用户体验,总会弄个loading告诉用户其实内容正在加载,而不是网站崩了.但是貌似之前使用gif图片的情况比较多,可能是为了兼容各 ...
- ajax加载菊花loading效果
Ajax异步请求的时候,一般都会利用一个动态的gif小图片来制作一个Ajax Loading,以便增加用户体验. 这里我们可以使用Spin.js,该js脚本压缩后5k,可以不用任何图片,任何外部CSS ...
随机推荐
- uva639 回溯!
#include<iostream> using namespace std; int n,Max,C[4][4]; char board[5][5]; bool vis[16]; boo ...
- Android-ListView-(BaseAdapter使用)
在Android中就提供了专门列表显示条目的控件,ListView控件,ListView控件不是一次性加载全部数据,他是只加载用户在屏幕看得到的数据,当用户滑动的过程中在去加载新的数据,同时会自动销毁 ...
- duilib入门简明教程 -- 界面设计器 DuiDesigner (10)
上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的话,非常的不直观,也很不方便. 所以这一章准备介绍duilib的UI设计器,由于这个设计器很不 ...
- Inno Setup 编译器
Inno Setup 编辑 Inno Setup用Delphi写成,其官方网站同时也提供源程序免费下载.它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀.In ...
- c# webbrowser在xp下自动闪退的一个坑
接前面的做了个扫码登录的,但是使用中发现在win7下没有题,但是在xp中使用时在加载那个二维码时会导致直接闪退,还无法捕捉到错误,折腾了一下午无果. 今天早上来看贴子有人说可能是webbrowser中 ...
- C# try catch finally
抛出异常开销非常大(相对而言),所以不要过多的在程序中使用它们 既然finally一定是要执行的,即使try块中有return
- 对比Vector、ArrayList、LinkedList区别
Vector是Java早期提供的线程安全的动态数组.因为同步是又额外开销的,所以如果不需要线程安全,不建议选择.Vector内部用对象数组保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的 ...
- “全栈2019”Java第六十八章:外部类访问内部类成员详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 木马APP的简单分析(Android Killer分析)
本文作者:三星s7edge 一.此贴目的:分析一个木马APP样本的行为.—————————————————————————————————————————————————-二.分析步骤及结果: 文件名 ...
- Python 中的 10 个常见安全漏洞,以及如何避免(下)
简评:编写安全代码很困难,当你学习一个编程语言.模块或框架时,你会学习其使用方法. 在考虑安全性时,你需要考虑如何避免被滥用,Python 也不例外,即使在标准库中,也存在用于编写应用的不良实践.然而 ...