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正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
jQuery 实现图片的依次加载图片功能
Jul 06 jQuery
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
关于jquery中attr()和prop()方法的区别
May 28 jQuery
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
jQuery实现参数自定义的文字跑马灯效果
Aug 15 jQuery
jQuery实现表格隔行换色
Sep 01 jQuery
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 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构造函数的继承方法
2015/02/09 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
php中__toString()方法用法示例
2016/12/07 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
python读取文件名并改名字的实例
2019/01/07 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
使用python计算三角形的斜边例子
2020/04/15 Python
python实现文法左递归的消除方法
2020/05/22 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
初中三好学生事迹材料
2014/01/13 职场文书
教育科研先进个人材料
2014/01/26 职场文书
交通文明倡议书
2014/05/16 职场文书
妇联主席先进事迹
2014/05/18 职场文书
车间安全生产标语
2014/06/06 职场文书
小学捐书活动总结
2014/07/05 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
师范生见习自我总结
2015/06/23 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
Golang 字符串的常见操作
2022/04/19 Golang