我们常常会遇到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])continue
var 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))return
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";
}
}

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

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

js img图片加载失败,重新加载+断网检查的更多相关文章

  1. Mvc程序字体加载失败问题

    在我们开发的asp.net-mvc项目中,有时会出现字体加载失败的现象,但是一检查字体文件目录,发现文件目录都是存在的且有效的,这是为何呢?原来需要再web.config文件中添价少许配置代码就搞定. ...

  2. js解决img标签加载失败显示默认图片

    问题: 为所有显示楼盘的页面添加一个加载失败的默认图片. 基本思路: img标签中有个onerror属性,专门用来处理加载失败的事件.所以可以用jquery添加onerror属性,在onerror中加 ...

  3. js 图片加载失败处理方法

    在项目中不可避免会用到图片,尤其是列表,有时候图片会加载失败:这样就会显示一个很难看的坏图片缩略图:下面介绍两种方法,解决这个问题: 1.如果在你的项目中有引入jQuery插件,你可以使用error( ...

  4. JQuery图片加载显示loading和加载失败默认图片

    在很多时候我们需要用到图片加载功能,在网上搜资料后就想为了以后使用方便重新整理了下,结果如图: 最后一张是加载失败显示的图片,没找到合适的图片,先用他顶替. 页面引用 <div class=&q ...

  5. WebForm、MVC图片加载失败处理

    还是那个该死的WebFrom项目,部分功能替换为MVC后感觉好多了,但是WebForm.MVC都有图片加载失败时显示提示图片的需求,并且统一在js中处理.问题来了,js中图片路径怎么处理呢?现场有可能 ...

  6. 微信小程序 图片加载失败处理方案

    小程序端展示网络资源图片可能会失败,下面介绍一种自己的处理方法 1. js文件中判断图片 url 是否存在,存在则正常显示,不存在则替换url为本地默认图片 2. 当图片 url 存在,但是加载失败时 ...

  7. 伪元素黑魔法:一个替代onerror解决图片加载失败的方案

    问题的引出是这样的,在一个项目中有大量的页面主体是table做数据展示,所以就封装了一个table的组件,提供动态渲染的方案.有个问题是数据类型中有图片,对于图片的加载失败我们需要做容错.一般我们的思 ...

  8. img error 图片加载失败的最佳方案

    有时候, 当img的src加载失败, 会显示缺省碎片图片,  影响用户体验.  有一个js事件onerror就派上了用场. 它可以在加载失败时, 显示缺省的图片. 它有两种使用方式. 第一种: 使用纯 ...

  9. js 判断图片和视频是否加载成功

    图片: 失败: // 方法 1:更换图片地址 $('img').error(function(){ $(this).attr('src', '加载失败.png'); }); // 方法 2:隐藏它 $ ...

随机推荐

  1. Python测试(二)

    # 1.计算1-300之间所有能被3和7整除的所有数之和# num = 0# for i in range(1,300):# if i%3 ==0 and i%7 ==0:# num += i# pr ...

  2. CentOS 7.5安装pycharm

    环境 安装环境: windows 10 Pro CentOS Linux release 7.6.1810 (Core) VMWare Workstation 15 Pro 安装图形化界面包 首先更新 ...

  3. IOS-iOS 8 : Location Services not working(iOS 8 定位应用定位失败)

    如果是xcode6和ios 8的话,需要调用 CLLocationManager requestAlwaysAuthorization 方法,具体步骤如下: 1. @interface里: CLLoc ...

  4. Could not find result map java.util.HashMap

    Could not find result map java.util.HashMap 找不到结果图java.util.HashMap MyBatis 找不到返回的 'resultMap'!把resu ...

  5. pytorch 7 save_reload 保存和提取神经网络

    import torch import matplotlib.pyplot as plt # torch.manual_seed(1) # reproducible # fake data x = t ...

  6. 模块打包机--webpack--基础使用

    什么是webpack? 作用有哪些?   WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Type ...

  7. ASP.NET-js和C#混合编程的例子

    使用<text>这个伪元素来强制Razor从编译模式返回到内容模式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  8. APP热更新方案(转)

    本文转载自[http://creator.cnblogs.com/] 博客地址:Zealot Yin 为什么要做热更新 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就 ...

  9. vue中export default 在console中是this.$vm

    vue中export default 在console中是this.$vm 用vue-cli搭出框架,用webstorm进行开发,参考vue2的官网进行教程学习, 在vue-cli中是用es6的exp ...

  10. 【剑指offer】Q31:连续子数组的组大和

    简短的分析见:http://blog.csdn.net/shiquxinkong/article/details/17934747 def FindGreatestSumOfSubArray(arra ...