解决js图片加载时出现404的问题
运营网站久了之后,无法避免会出现图片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事件
<imgsrc="someimage.png"onerror="imgError(this);"/> //原生JS: functionimgError(image){ //隐藏图片 image.style.display='none'; //替换为默认图片 //document.getElementById("img").setAttribute("src","images/demo.png"); } //使用jQuery处理: functionimgError(image){ $(image).hide(); //$(this).attr("src","images/demo.png"); }
注意:需要将处理函数定义在head,防止图片加载出错时没有读取到处理函数
2.使用jQuery监听error
//通常不会再HTML里面内联js,可以使用.error对图片进行监听处理 $('#testimg').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); } functionisType(o,t){ return(typeofo).indexOf(t.charAt(0).toLowerCase())===0; } //主要逻辑 functionimage(src,cfg){ varimg,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){ returnnull; } prop=isType(img.naturalWidth,'u')?'width':'naturalWidth'; img.alt=cfg.alt||img.alt; //Addtheimageandinsertifrequested(mustbeonDOMtoloador //pullfromcache) 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; } } returnimg; }
以上函数有许多用处:
1.获取图片信息:图片是否可下载,图片宽高
image('img',{ success:function(){alert(this.width+"-"+this.height);}, failure:function(){alert('image404!');}, }); //验证资源是否下载 image('images/banner/banner_2.jpg',{ success:function(){console.log('sucess')}, failure:function(){console.log('failure')}, target:'myContainerId', insertBefore:'someChildOfmyContainerId' });
2.下载并插入图片
varreport=$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问题的解决办法,希望大家有所收获。