jQuery图片加载失败替换默认图片方法汇总


Posted in jQuery onNovember 29, 2017

本文主要讨论页面中图片加载失败后替换默认图片的几种方式

重点来了:一定要记住error事件不冒泡。

相关的知识点:jquery的ready方法、$("img").error()、img的complete属性、插件imagesLoaded、事件委托、事件捕获和图片预加载的方法等

1. 图片加载失败替换为默认图片

1.1 给图片绑定error事件

当图片加载失败时会触发error事件

$("img").on("error", function () {
  $(this).attr("src", "../img/img.jpg");
});
  • 不建议事件事件属性onerror,你懂的~O.o
  • 如果是动态添加的图片,还要重新绑定这个事件。像click事件这些可以利用事件委托的方式,但是事件委托是利用事件冒泡的思路来做的,而error事件不支持冒泡
  • 不建议在ready方法中给img绑定error事件,可能img加载图片失败时,img并没有绑定error事件,就会导致没有替换为默认图片

1.2 利用complete属性来判断

当图片加载失败时complete属性值为false,加载成功时true

$("img").each(function () {

  if (!this.complete || (typeof this.naturalWidth == "undefined" && this.naturalWidth == 0) || !this.src) {
    $(this).attr("src", "../img/img.jpg");
  }
});
  • 如果是动态添加的图片,还是要重新判断的
  • 可以在一点时间后再来判断,不然刚新增图片,图片资源可能还没有请求完就用这个方式来判断会有问题的
  • HTML 5中,新增了两个用来判断图片的宽度和高度的属性,分别为 naturalWidth 和naturalHeight属性(必须在图片完全下载到客户端浏览器才能判断)
  • img的onreadystatechange这个属性不讨论,有浏览器差异性

1.3 利用error事件捕获来处理(全局判断,动态添加的元素也可以-最优解)

document.addEventListener("error", function (e) {

  var elem = e.target;
  if (elem.tagName.toLowerCase() == 'img') {
    elem.src = "../img/img.jpg";
  }
}, true);

可以监听到动态产生的img标签

1.4 利用插件imagesLoaded提供的方法来处理

imagesLoaded主要用来在手机端瀑布流方式来加载图片,也可以用来处理图片加载失败替换为默认图片

// 用的是jQuery的deferred来实现的
$('img').imagesLoaded()
    .always(function (instance) { // always事件,在所有图片都加载完成(成功与否不论)时触发
      console.log('all images loaded');
    })
    .done(function (instance) { // done事件,在所有图片都加载成功时触发
      console.log('all images successfully loaded');
    })
    .fail(function (instance) { // fail事件,在所有图片都加载完成,并且至少有一张图片加载失败时触发
      console.log('all images loaded, at least one is broken');
    })
    .progress(function (instance, image) { // progress事件,在每一张图片加载完成时都触发一次
      var result = image.isLoaded ? 'loaded' : 'broken'; // 判断当前图片加载成功与否
      image.img.src = image.isLoaded ? image.img.src : "../img/img.jpg";
      console.log('image is ' + result + ' for ' + image.img.src);
    });

如果是动态添加的图片,还是要重新判断的

2. 图片预加载的方法

// 实现预加载图片,传入的参数是数组,数组的每一项为该图片的地址
function preloadimages(arr) {
  var newimages = [];
  var arr = (typeof arr != "object") ? [arr] : arr; // 确保参数总是数组
  for (var i = 0,len = arr.length; i < len; i++) {
    newimages[i] = new Image();
    newimages[i].src = arr[i];
  }
}

总结

以上所述是小编给大家介绍的jQuery图片加载失败替换默认图片方法汇总,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

jQuery 相关文章推荐
简单实现jQuery弹幕效果
May 06 jQuery
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
jQuery常用选择器详解
Jul 17 jQuery
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
基于jquery实现多选下拉列表
Aug 02 jQuery
jqueryUI tab标签页代码分享
Oct 09 jQuery
jQuery中过滤器的基本用法示例
Oct 11 jQuery
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
jQuery实现炫丽的3d旋转星空效果
Jul 04 jQuery
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
jQuery选择器之基本过滤选择器用法实例分析
Feb 19 jQuery
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
Jul 11 jQuery
jquery animate动画持续运动的实例
Nov 29 #jQuery
JQuery 又谈ajax局部刷新
Nov 27 #jQuery
jQuery Datatables表头不对齐的解决办法
Nov 27 #jQuery
javaScript和jQuery自动加载简单代码实现方法
Nov 24 #jQuery
jquery实现回车键触发事件(实例讲解)
Nov 21 #jQuery
jQuery实现所有验证通过方可提交的表单验证
Nov 21 #jQuery
jquery-file-upload 文件上传带进度条效果
Nov 21 #jQuery
You might like
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
Yii使用技巧大汇总
2015/12/29 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
Vuex的热更替如何实现
2020/06/05 Javascript
Python lxml模块安装教程
2015/06/02 Python
windows系统下Python环境搭建教程
2017/03/28 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Python tkinter常用操作代码实例
2020/01/03 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
办公室文员工作自我评价
2013/12/01 职场文书
施工人员岗位职责
2013/12/12 职场文书
司考复习计划
2015/01/19 职场文书
毕业典礼致辞
2015/07/29 职场文书
Java移除无效括号的方法实现
2021/08/07 Java/Android