自定义ajax

  1. /**
  2. * @desc 自定义ajax请求,添加等待gif
  3. */
  4. var n=0;
  5. $.defineAjax=function(obj){
  6. n++;
  7. if(!$('#loadingDiv')[0]){
  8. var str='<div id="loadingDiv"><img class="loadingImg" src="'+path+'/ui/common/img/loading.gif"></div>';
  9. $('body')[0].appendChild($(str)[0]);
  10. }
  11. if(typeof obj.success == 'function'){
  12. var fun=obj.success;
  13. obj.success=function(res){
  14. if($('#loadingDiv')[0]){
  15. $('#loadingDiv').remove();
  16. }
  17. fun(res);
  18. }
  19. }
  20. var opt={
  21. type:'post',
  22. data:{},
  23. dataType:'json',
  24. beforeSend:function(xhr){},
  25. complete:function(xhr,status){
  26. if(--n<=0){
  27. $('#loadingDiv').remove();
  28. }
  29. }
  30. },option={};
  31. if(obj.beforeSend===undefined&&obj.complete===undefined){
  32. option=$.extend({},opt,obj);
  33. }
  34. setTimeout(function(){
  35. $.ajax(option);
  36. },200)
  37. }

关键能耗指标分析

js:

option为ajax里面的参数

  1. $.pageAjax=function(option){
  2. if(!$('div.page-loading')[0]){
  3. $('body').append('<div class="page-loading" style="display:none;"></div>');
  4. }
  5. $('div.page-loading').fadeIn(100);
  6. var op={
  7. type:"post",
  8. DataType:'json'
  9. },fn={
  10. success:function(res,mes){
  11. $('body').find('div.page-loading').fadeOut(100);
  12. if(typeof option.success==='function'){
  13. option.success(res,mes);
  14. }
  15. },
  16. error:function(XHRObj,err,ext){
  17. $('body').find('div.page-loading').fadeOut(100);;
  18. if(typeof option.error==='function'){
  19. option.error(XHRObj,err,ext);
  20. }
  21. }
  22. }
  23. var opt=$.extend({},op,option,fn);
  24. $.ajax(opt);
  25. }

css

  1. div.page-loading{
  2. position: absolute;
  3. top:;bottom:;
  4. left:;right:;
  5. background: url('../img/page_loading.gif') no-repeat center center;
  6. margin:auto;
  7. width:65px;
  8. height:65px;
  9. border-radius: 50%;
  10. }

调用:

  1. $.pageAjax(opt.ajax);

效果:

这种正常来说是ok的,单个请求的时候是不会有问题,但是如果有多个请求在发生,并且之前的请求还没有完成的时候,又进行下一个请求,这样就会存在问题

修改:在每次请求之前记录请求的次数,请求之前加1,请求之后不管成功或者失败都减1,如果为0或者小于0,那么就隐藏loading

js

  1. /*
  2. *ajax loading包装插件
  3. */
  4. $.pageAjax=function(option){
  5. var op={
  6. type:"post",
  7. DataType:'json'
  8. },fn={
  9. beforeSend:function(){
  10. var el=$('div.page-loading');
  11. if(!el[0]){
  12. $('body').append('<div class="page-loading" data-times="1" style="display:block;"></div>');
  13. }else{
  14. showOrHide(el,'+');
  15. }
  16. //每次只有要请求都要显示
  17. el.fadeIn(100);
  18. },
  19. success:function(res,mes){
  20. showOrHide($('body').find('div.page-loading'),'-');
  21. if(typeof option.success==='function'){
  22. option.success(res,mes);
  23. }
  24. },
  25. error:function(XHRObj,err,ext){
  26. showOrHide($('body').find('div.page-loading'),'-');
  27. if(typeof option.error==='function'){
  28. option.error(XHRObj,err,ext);
  29. }
  30. }
  31. }
  32. var opt=$.extend({},op,option,fn);
  33. $.ajax(opt);
  34. }
  35. function showOrHide(el,p){
  36. var num=el.attr('data-times');
  37. if(isNaN(num)){num=0;}
  38. if(p=='+'){
  39. el.attr('data-times',++num);//注意此处是++num ++i和i++的区别借鉴for循环的例子
  40. }else if(p=='-'){
  41. el.attr('data-times',--num);
  42. if(num<=0){
  43. el.fadeOut(100);
  44. }
  45. }
  46. }

还有一种,直接方式,页面查询数据的时候调用显示的方法,成功或者失败的时候调用隐藏的方法

调用显示:

  1. $("#searchbtn").off("click").on("click","",function(){
  2. $.fn.showorhideLoading.show();
  3. getChecknode();
  4. })

调用隐藏

  1. function postAjaxData(param){
  2. //请求
  3. $.ajax({
  4. url:'/findEnergyDayTypeDataList',
  5. data:param,
  6. dataType:'json',
  7. success:function(data){
  8. $.fn.showorhideLoading.hide();//隐藏loading
  9. //处理数据
  10. var dataObj=initData(data.detail);
  11. },
  12. error:function(){
  13. $.fn.showorhideLoading.hide();//隐藏loading
  14. }
  15. })
  16. }

html

  1. <div class="loading" style="display: none;"><img src="/static/ui/modules/systemMan/demo/img/loading.gif" alt=""></div>

css

  1. /*loading效果*/
  2. .loading{
  3. position:fixed;
  4. top:;
  5. left:;
  6. right:;
  7. bottom:;
  8. width:100%;
  9. height:100%;
  10. background-color: rgba(0,0,0,.5);
  11. z-index:;
  12. }
  13. .loading>img{
  14. position:absolute;
  15. width:40px;
  16. height:40px;
  17. top:;
  18. left:;
  19. right:;
  20. bottom:;
  21. margin:auto;
  22. }
  1. /**
  2. * 控制dialog的显示和隐藏
  3. */
  4. $.fn.showorhideLoading={
  5. show:function(id){
  6. if(id===undefined){
  7. id="body";
  8. }
  9. //判断是否存在loading
  10. var el=$(id).find(".loading");
  11. if(!el[0]){
  12. $(id).append(
  13. '<div class="loading" style="display: block;">'+
  14. '<img src="/static/ui/modules/systemMan/demo/img/loading.gif" alt="">'+
  15. '</div>'
  16. );
  17. }
  18. el.show()
  19. },
  20. hide:function(id){
  21. if(id===undefined){
  22. id="body";
  23. }
  24. //判断是否存在loading
  25. var el=$(id).find(".loading");
  26. if(el){el.hide()}
  27. }
  28. }

自定义ajax,添加loading效果的更多相关文章

  1. Vue通过状态为页面切换添加loading、为ajax加载添加loading

    以下方法需要引入vuex,另使用了vux的UI框架,ajax添加loading还引入了axios. 一.为页面切换添加loading. loading.js: import Vue from 'vue ...

  2. DataGrid点击上下一页loading效果

    js添加显示loading和取消loading方法 function showtbloading() { var target = $("#GridView1"); if (tar ...

  3. vue中iframe加载慢,给它加loading效果

    js框架:vue ui框架:element 因为iframe加载慢,所以在它加载完成前添加loading效果,loading用的是element家的加载效果 <template> < ...

  4. vue实现ajax滚动下拉加载,同时具有loading效果

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 自定义loading效果

    结合Font Awesome字体图标自定义loading效果 Font Awesome字体图标地址:http://www.fontawesome.com.cn/faicons/ 使用javascrip ...

  6. Android动画效果之自定义ViewGroup添加布局动画

    前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...

  7. php+ajax实现登录按钮加载loading效果

    php+ajax实现登录按钮加载loading效果,一个提高用户体验,二个避免重复提交表单,ajax判断加载是否完成. 登录表单 <form onsubmit="return chec ...

  8. JQuery+CSS3实现Ajax加载时loading效果

    之前通过Ajax请求加载数据的时候,在数据还没有呈现出来前,为了更好的用户体验,总会弄个loading告诉用户其实内容正在加载,而不是网站崩了.但是貌似之前使用gif图片的情况比较多,可能是为了兼容各 ...

  9. ajax加载菊花loading效果

    Ajax异步请求的时候,一般都会利用一个动态的gif小图片来制作一个Ajax Loading,以便增加用户体验. 这里我们可以使用Spin.js,该js脚本压缩后5k,可以不用任何图片,任何外部CSS ...

随机推荐

  1. 洛谷P2173 [ZJOI2012]网络(10棵lct与瞎jb暴力)

    有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构成的环. 在这个图上,你 ...

  2. .net 有参属性 index (索引)

    public class IndexTempte { public ArrayList nameList = new ArrayList(); public string this[int index ...

  3. 【模板模式】 Template Pattern

    模板模式 又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤(这个我觉得很抽象,很抽象) e:学会说“不 ...

  4. mybatis 单表的增删改查

    添加数据返回id mapper.xml mapper -> insert -> selectKey mybatis 内置别名

  5. 生成文件的MD5、SHA、SHA256

    生成文件的MD5.SHA.SHA256 Linux系统生成MD5.SHA.SHA256md5sum file1.zip  >> MD5.txt sha1sum file1.zip > ...

  6. 把windows电脑变成路由器使用

    实用小技巧1 把windows电脑变成路由器使用 适用对象: windows7.windows8的笔记本电脑或者有无线网卡的台式电脑 网络要求: CMCC-EDU和家里拨号上网的都可以,但是电信的校园 ...

  7. Linux系统忘记管理员密码(CentOS、RHEL、Ubuntu)

    Linux系统忘记管理员密码(CentOS.RHEL.Ubuntu) 系统使用过程中,尤其是生产环境中.万一忘记管理员密码,该怎么办?是不是很绝望? 1.RHEL 7.0 重启主机进入引导界面键入e键 ...

  8. 「HNOI 2015」落忆枫音

    题目链接 戳我 \(Description\) 给一张\(n\)割点\(m\)条边的\(DAG\),保证点\(1\)不存在入边,现在需要在\(DAG\)中加入一条不在原图中的边\((x,y)\),求这 ...

  9. 二十三、MongoDb 数据库介绍、安装、启动和连接(非关系型数据库)

    1.数据库和文件的主要区别 1. 数据库有数据库表.行和列的概念,让我们存储操作数据更方便2. 数据库提供了非常方便的接口,可以让 nodejs.php java .net 很方便的实现增加修改删除功 ...

  10. Windows下磁盘无损重新分配

    打开百度(www.baidu.com),找到我们的分区助手.exe 单击“普通下载”,会下载一个安装包. 这时候,我们进行安装.安装完成如下. 对着那个盘容量较大的盘右键,分配空闲空间. 服务器多次重 ...