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

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

img标签事件属性

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

dragenter,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:图片加载的时候,用户通过点击停止加载时触发,通常在这里触发一个提示:“图片正在加载”。

图片加载完成之后触发。

1. 对图片监听onerror事件

rush:js;">

// 原生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

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

注意:

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

3. 使用函数处理

rush:js;"> // 原生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. 获取图片信息:图片是否可下载,图片宽高

rush:js;"> 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. 下载并插入图片

rush:js;"> var report = $id('report'),callback = { success : function () { report.innerHTML += '

Success - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')

'; },failure : function () { report.innerHTML += '

Failure - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')

'; },target : 'target' };

image('img',callback);
image('images/banner/banner_2.jpg',callback);

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)