自定义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 ...
随机推荐
- CodeForces 122G Lucky Array(一脸懵逼的树状数组)
Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal re ...
- 基于Struts2开发快递收发系统 毕业设计 源码
基于Struts2开发快递收发系统 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat6+MySql数据库 运行效果图: 此源码经过详细测试 保证 ...
- [LeetCode 题解]: ZigZag Conversion
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 The string ...
- vcenter安装错误The DSN is pointing to anunspported ODBC driver...
在安装vcenter server中采用现有独立sql server数据库时出现下列错误. 这是由于当前独立数据库版本和当前系统的客户端驱动不匹配.导致我们在odbc中配置dsn无法正常运行. 如sq ...
- opencv+opencv_contrib 人脸识别和检测 python开发环境快速搭建(30分钟)图文教程
很多朋友为了学习python.ML(机器学习).DL(深度学习).opencv等花费了大量时间配置安装环境(一个朋友花了4天时间才配置好)各种搜索.下载.安装配置,出问题等. 市面上的配置资料很多,选 ...
- Django-02路由层
U RL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代 ...
- gitlab迁移版本库(保留原版本库的所有内容)
如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作. 1) 从原地址克隆一份裸版本库,比如原本托管于 GitHub git clone --ba ...
- django 配置xadmin
django xadmin本地安装 百度云 下载,激活码:bxhv,下载后不需要解压,直接本地 pip install xxx.zip django 版本需要 1.1.11, 1,添加app INST ...
- 快速启动工具Rulers 3.6
云盘下载:https://yunpan.cn/cq7mumZ5uzzgw (提取码:b16a) 能根据已经安装的所有软件的名称快速查询到并回车迅速打开1.Alt+空格无特效或者Alt键有特效控制显示和 ...
- javap -- Java 类文件解析器
参考文档 http://blog.chinaunix.net/uid-692788-id-2681132.html http://docs.oracle.com/javase/7/docs/techn ...