解决js图片加载时出现404的问题


Posted in Javascript onNovember 30, 2020

运营网站久了之后,无法避免会出现图片404的情况,原因可能是图片文件本来就不存在或目前不存在。常见的解决方案是将404图片隐藏或者是替换为默认的图片。 

img标签事件属性

img标签可使用的时间属性有:

onabort, onbeforeunload, onblur, onchange, onclick, oncontextmenu, ondblclick, ondrag, ondragend, ondragenter, ondragleave, ondragover, ondragstart, ondrop, onerror, onfocus, onkeydown, onkeypress, onkeyup, onload, onmessage, onmousedown, onmousemove, onmouseover, onmouseout, onmouseup, onmousewheel, onresize, onscroll, onselect, onsubmit, onunload

img标签常用的事件如下:

onerror:图像加载过程中发生错误时被触发。
onabort:图片加载的时候,用户通过点击停止加载时触发,通常在这里触发一个提示:“图片正在加载”。
onload:当图片加载完成之后触发。

1. 对图片监听onerror事件

<img src="someimage.png" onerror="imgError(this);" /> 
 
// 原生JS: 
function imgError(image){ 
 // 隐藏图片 
 image.style.display = 'none'; 
 // 替换为默认图片 
 // document.getElementById("img").setAttribute("src", "images/demo.png"); 
} 
 
// 使用jQuery处理: 
function imgError(image){ 
 $(image).hide(); 
 // $(this).attr("src", "images/demo.png"); 
}

注意:需要将处理函数定义在head,防止图片加载出错时没有读取到处理函数

2. 使用jQuery监听error

// 通常不会再HTML里面内联js,可以使用.error对图片进行监听处理 
$('#test img').error(function() { 
 $(this).hide(); 
 // $(this).attr("src", "images/demo.png"); 
});

注意:jQuery加载需要在img前,处理函数需在img后

3. 使用函数处理

// 原生JS解决方案 
function $id(id) { 
 return !id || id.nodeType === 1 ? id : document.getElementById(id); 
} 
function isType(o, t) { 
 return (typeof o).indexOf(t.charAt(0).toLowerCase()) === 0; 
} 
 
// 主要逻辑 
function image(src, cfg) { 
 var img, prop, target; 
 cfg = cfg || (isType(src, 'o') ? src : {}); 
 
 img = $id(src); 
 if (img) { 
 src = cfg.src || img.src; 
 } else { 
 img = document.createElement('img'); 
 src = src || cfg.src; 
 } 
 
 if (!src) { 
 return null; 
 } 
 
 prop = isType(img.naturalWidth,'u') ? 'width' : 'naturalWidth'; 
 img.alt = cfg.alt || img.alt; 
 
 // Add the image and insert if requested (must be on DOM to load or 
 // pull from cache) 
 img.src = src; 
 
 target = $id(cfg.target); 
 if (target) { 
 target.insertBefore(img, $id(cfg.insertBefore) || null); 
 } 
 
 // Loaded? 
 if (img.complete) { 
 if (img[prop]) { 
 if (isType(cfg.success,'f')) { 
 cfg.success.call(img); 
 } 
 } else { 
 if (isType(cfg.failure,'f')) { 
 cfg.failure.call(img); 
 } 
 } 
 } else { 
 if (isType(cfg.success,'f')) { 
 img.onload = cfg.success; 
 } 
 if (isType(cfg.failure,'f')) { 
 img.onerror = cfg.failure; 
 } 
 } 
 
 return img; 
}

以上函数有许多用处:

1. 获取图片信息:图片是否可下载,图片宽高

image('img',{ 
 success : function () { alert(this.width + "-" + this.height); }, 
 failure : function () { alert('image 404!'); }, 
}); 
 
// 验证资源是否下载 
image('images/banner/banner_2.jpg', { 
 success : function () {console.log('sucess')}, 
 failure : function () {console.log('failure')}, 
 target : 'myContainerId', 
 insertBefore : 'someChildOfmyContainerId' 
});

2. 下载并插入图片

var report = $id('report'), 
 callback = { 
 success : function () { 
 report.innerHTML += '<p>Success - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')</p>'; 
 }, 
 failure : function () { 
 report.innerHTML += '<p>Failure - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')</p>'; 
 }, 
 target : 'target' 
 }; 
 
image('img', callback); 
image('images/banner/banner_2.jpg', callback);

以上就是js针对图片加载时出现404问题的解决办法,希望大家有所收获。

Javascript 相关文章推荐
分享27款非常棒的jQuery 表单插件
Mar 28 Javascript
node.js中的http.response.writeHead方法使用说明
Dec 14 Javascript
JS随机调用指定函数的方法
Jul 01 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
Jan 29 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
Oct 26 jQuery
详解webpack打包后如何调试的方法步骤
Nov 07 Javascript
vue2.0 实现富文本编辑器功能
May 26 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
基于javascript原生判断DOM是否加载完毕
Oct 14 Javascript
jquery实现的点击翻书效果代码
Nov 04 #Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
Nov 04 #Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 #Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 #Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 #Javascript
JavaScript前端开发之实现二进制读写操作
Nov 04 #Javascript
js实现二级菜单渐隐显示
Nov 03 #Javascript
You might like
用PHP动态创建Flash动画
2006/10/09 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
javascript 伪数组实现方法
2010/10/11 Javascript
异步加载script的代码
2011/01/12 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
python 提取文件的小程序
2009/07/29 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
python反转列表的三种方式解析
2019/11/08 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
应征英语教师求职信
2013/11/27 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
工程售后服务承诺书
2014/05/21 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
Pandas 稀疏数据结构的实现
2021/07/25 Python