我们常常会遇到img加载图片的时候因为网络问题或者图片过大导致图片加载失败的问题,页面就因为这张蹦掉的图变得不美观。所以我们需要图片加载失败的时候重新加载图片,前端图片加载优化

//js方法定义
function resetImgUrl(imgObj,imgSrc,maxErrorNum){  if(maxErrorNum > 0){  imgObj.onerror=function(){  reSetImgUrl(imgObj,imgSrc,maxErrorNum-1);  };  setTimeout(function(){  imgObj.src=imgSrc;  },500);  }else{  imgObj.onerror=null;  imgObj.src="<%=basePath%>images/noImg.png";  }  }  //调用
<img onerror='resetImgUrl(this,this.src,3)' src='"+srcStr+"'/>
//该逻辑摘自网络http://sunshuaij2ee.iteye.com/blog/1727993

判断网络连接情况,重新连接网络时再请求图片

var onLine = true
var eventList = {} ;//用于储存待重新执行函数的事件列表
window.addEventListener('offline',function(){onLine = false;
})
window.addEventListener('online',function(){if(onLine == false){onLine = true; reLine();}
})
//重新连接网络的时候重新调用事件列表对象里面的函数
function reLine(){for(var key in eventList){if(!eventList[key])continuevar arg = eventList[key].arg;var thisOnFn = eventList[key].that;eventList[key].fun.apply(thisOnFn,arg);eventList[key] = null;}
}
//已经断网了,把函数存储到一个对象里面
function offlined(fun,arg,that){if(!onLine){//arg = arguments;var name = fun.name||'__new';eventList[name] = {};eventList[name].fun = fun;//原函数eventList[name].that = that;//原上下文对象eventList[name].arg = [].slice.call(arg);//原参数return true}return false
}

测试一下(把代码复制到chrome的console里面运行)

function aa(){offlined(aa,arguments,this)for(var i=0 ; i<arguments.length;i++){console.log(arguments[i]);}
}
//断开网络再执行一下代码
aa(123,234,345)
//先输出一遍
123 234 345
//再连接上网络后看输出
123 234 345

结合上面的图片重新加载逻辑

function resetImgUrl(imgObj,imgSrc,maxErrorNum){if(offlined(reSetImgUrl,arguments,this))returnif(maxErrorNum > 0){  imgObj.onerror=function(){  reSetImgUrl(imgObj,imgSrc,maxErrorNum-1);  };  setTimeout(function(){  imgObj.src=imgSrc;  },500);  }else{  imgObj.onerror=null;  imgObj.src="<%=basePath%>images/noImg.png"; }
}

文章首发地址 https://juejin.im/user/5a30c3736fb9a044ff317351

涉及原创内容,转载请附注明出处

转载于:https://www.cnblogs.com/lalalagq/p/9959786.html

js img图片加载失败,重新加载+断网检查 1相关推荐

  1. 图片加载失败后---加载默认图片

    一 . 图片加载失败原因: 文件路径不正确: 标签属性等元素错误: 错误的文件扩展名 文件丢失 存放位置出现问题 网络传输问题: 二 . 加载失败后页面默认样式 如下 ↓: 三 . 封装函数:图片加载 ...

  2. js img图片加载失败,重新加载+断网检查

    我们常常会遇到img加载图片的时候因为网络问题或者图片过大导致图片加载失败的问题,页面就因为这张蹦掉的图变得不美观.所以我们需要图片加载失败的时候重新加载图片 //js方法定义 function re ...

  3. Element-ui el-image图片时而加载失败时而加载成功

    在计算机非0即1的世界怎么会出现这种不确定的事情呢?把el-image的懒加载属性开启一下试试: <el-image :lazy="true" :src="deta ...

  4. 关于SpringMvc中js和图片路径正确但是不能加载的问题

    SpringMvc中,在没有设置拦截特殊的请求时,会默认拦截所有请求,包括js和图片等静态请求,造成资源查询失败404错误(http://localhost:8080/SSHA/js/jquery.j ...

  5. 辐射4核能选项用计算机失败,gg修改器出现保护进程加载失败怎么解决 | 手游网游页游攻略大全...

    发布时间:2018-02-21 网易云音乐歌曲加载失败怎么办?该怎么处理这个情况呢?今天小编给的就带来了网易云音乐歌曲加载失败的解决方法介绍,还不太清楚的小伙伴们赶快来看看吧! 1.首先,我关闭了网易 ...

  6. php项目css加载失败,css加载失败如何解决

    当我们在浏览网页时,偶尔会看见网站样式加载不出来.对于前端初学者来说,可能也会出现css样式不能正常调用或显示.那么想要去解决这样的问题,就需要知道出现这样问题的原因. css加载失败可能有多种原因导 ...

  7. angularjs 图片加载失败时,加载默认图片

    app.directive('errSrc', function () { return { link: function (scope, element, attrs) { element.bind ...

  8. iframe js 加载失败_JS加载iFrame出现空白问题的解决办法

    在使用IE6浏览器开发过程中出现各种奇葩问题,非常棘手,费劲脑汁终于问题解决.特此把我的问题描述及解决办法分享到脚本之家平台,帮助那些遇到此问题的朋友. 1.js加载iframe出现空白 iframe ...

  9. element中图片加载失败

    element引入图片使用el-image 引入图片 运行却出现加载失败 看了好多次官网,确认无误,最后网上查了好久,发现引入的时候要在后面加一个require 最后才成功! require明明是引入 ...

最新文章

  1. Go学习之-用vscode写go代码遇到的问题
  2. 真我新格调 勇敢使梦想×××
  3. OpenGL画矩形函数:glRectf,四个参数分别表示了位于对角线(左下到右上)上的两个点的横纵坐标
  4. Python 中的Pyc文件
  5. Serverless 工程实践 | 自建 Apache OpenWhisk 平台
  6. LoadRunner 常用C语言函数使用
  7. Non-resolvable parent POM
  8. ARM架构、指令集、内核版本、CISC与RISC、ARM产品线
  9. Java 并发编程实战 -- 常见概念
  10. 计算机提示pdf不能加载,打开电脑中的PDF文档无法显示内容提示Please wait怎么解决...
  11. C++ OpenCV遍历并处理一个文件夹中的所有图片
  12. 电脑桌面点什么都是计算机,电脑桌面总是弹出广告怎么办?教你2种方法,轻松解决...
  13. 开发QQ互联ios版Ane扩展 辛酸史
  14. Excel应用技巧之三——常用技巧
  15. Java实现简单注册登录等功能
  16. php jquery ajax九宫格抽奖,jQuery九宫格抽奖
  17. Microsoft Teams通话质量仪表盘(CQD)怎么玩?
  18. 2023最近很火的抖音解封技术教程分析+价值1000+
  19. Pycharm 安装 github copilot 报错:failed to initiate the github login process please try again
  20. Vue2.和Vue3.生命周期的区别,对比。 详解生命周期中的每个钩子函数,setup,

热门文章

  1. [附源码]计算机毕业设计JAVA个性化新闻推荐系统
  2. 赞赏——人人都能赞赏成书
  3. AI行业态势感知(第五期)
  4. VSCODE+MSYS2+GIT BASH+MAKEFILE 建立工程
  5. Android如何调用支付宝支付 微信支付
  6. 王者服务器维护12.3,王者荣耀12.3体验服更新内容
  7. 如何管理90后员工?
  8. tensorflow 按维度相加_Pioneer DJ号称全新维度的CDJ-3000到底如何?_品牌新闻_品牌...
  9. 你好请问计算机房在几楼,电梯机房一般在几楼
  10. JavaScript预编译过程