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

运营网站久了之后,无法避免会出现图片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问题的解决办法,希望大家有所收获。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索动态加载js
, js重新加载页面
, js404
js判断页面是否404
javascript alert 404、javascript 404、404怎么解决、优酷404页面怎么解决、解决 favicon.ico 404,以便于您获取更多的相关知识。

时间: 2024-07-28 14:57:27

解决js图片加载时出现404的问题_javascript技巧的相关文章

JS动态加载脚本并执行回调操作_javascript技巧

关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件里面的函数是不会成功的.本文讲解怎么在js中加载其它js文件并在加载完成后执行回调函数.  我们可以动态的创建 <script> 元素,然后通过更改它的 src 属性来加载脚本,但是怎么知道这个脚本文件加载完成了呢,因为我们有些函数需要在脚本加载完成生效后才能开始执行. 经过对网络上资源的搜索,我发现在 IE 浏览器中可以使用

Ext JS动态加载JavaScript创建窗体的方法_javascript技巧

JavaScript不需要编译即可运行,这让JavaScript构建的应用程序可以变得很灵活.我们可以根据需要动态从服务器加载JavaScript脚本来创建和控制UI来与用户交互.下面结合Ext JS来说明如何从服务器上动态加载JS脚本来动态创建窗体.  1 项目结构: 项目结构如下:其中GetJSUI一般处理程序用来从数据库表中抓取UI配置,并返回到客户端:Contents文件夹下用HTML文件和JS库等.  2 数据库表结构可以用下面的SQL在MSSQL中创建表,其中JavaScriptCo

JS 动态加载脚本的4种方法_javascript技巧

如果js文件都比较小,还是一个js好,这样可以减少连接数.下面是4种比较常用的方法,大家可以根据情况选择,最后 将会给推荐一个.1.直接document.write 复制代码 代码如下: <script language="javascript"> document.write("<script src='test.js'><\/script>"); </script> 2.动态改变已有script的src属性 复制代

js图片加载获取不到宽度和高度解决方法总结

第一次浏览的时候你根本就获取不到图片的宽高值,打印出来都是0,这些纠结了吧,怎么解决呢?就用setTimeout延时加载,200毫秒之后就执行,等图片彻底加载完之后就可以获取宽高了,这样就实现了只适应宽高和水平垂直居中了. 代码  代码如下 复制代码 var parent=$(".imgshow a img");         parent.click(function(){  //alert(test.width());                 var url=$(this

JqueryEasyUI 解决IE下加载时页面错乱的问题

问题描述: 一直觉得jqueryeasyui在IE下的渲染效果不大好,尤其刚进入页面时的加载,页面会出现布局错乱,虽然是一闪而过,但是给用户的体验不好: 可以通过在页面onload时,增加一个遮罩层,把jqueryeasyui的页面渲染过程遮住,等页面加载完后,扔掉遮罩层,显示页面: 解决办法: /* 文件说明:页面加载时Loading JS 文件描述:解决IE或FF下,初始化加载时,页面布局乱掉的问题,参考:http://283433775.iteye.com/blog/720895 */ v

JS判断图片是否加载完成方法汇总(最新版)_javascript技巧

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.下面小编给大家整理了几种关于JS判断图片是否加载完成方法汇总,一起看看吧. 一.load事件 <script type="text/javascript"> $('img').onload = function() { //code } </script> 优点:简单易用,不影响HTML代码. 缺点:只能指定一个元素,javascipt代码必须置于图片元素的下方 二.jquery方法 <script

js 图片加载失败,所导致的浏览器兼容问题

问题描述 网站当中经常会遇到图片加载失败的问题,img中有地址,但是地址打开是错误的.情况如下: 不同浏览器处理错误图片是不一样的,有的干脆就显示差号,例如IE,有的显示一张破碎的图片,有的则是给一张高度比较大的默认图,例如PC端的火狐,IOS中Safari,还有安卓中的UC浏览器.这样在手机中就会导致左右两侧图片高度不一致!如下图: 解决方案 其实这里解决很简单,判断当图片加载失败的时候给一个默认图就可以了,不让浏览器使用其自带的默认图.  代码如下 复制代码 <img src="/no

关于图片的预加载过程中隐藏未知的_javascript技巧

看完了曼联与曼城的同城德比,还有漫长的两个小时,才能看到期待中的国家德比.无聊的很,左右无事,便来论坛闲逛.看到了一章关于图片预加载的博文,其代码如下: 复制代码 代码如下: function loadImage(url, callback) { var img = new Image(); //创建一个Image对象,实现图片的预下载 img.src = url; if (img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数 callback(img); ret

JavaScript怎么判断图片是否加载完成以便获取其尺寸_javascript技巧

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以,求方法? 一.load事件 复制代码 代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src=https://yunq