网页中的图片缩放(onload)与网址错误(onerror)

今天搞定了个很奇怪的问题,特此分享出来.

就是html中img的缩放(使用onload属性),和显示默认图片(使用onerror属性),关于这个,网络上已经有大堆的说明,

同样的内容,我不再多说了,只说我的问题.

两个问题

1.使用onerror属性时,chrome下并不加载默认图片,我在开发工具里看时,src属性已经变了,但图片并不显示,在工具里点下src属性再回车(相当于编辑了下),默认图片便显示了,ie下无此情况,我之前也没有遇到这个情况.真正原因还没弄清楚.

此外,这个onerror会造成ie6堆栈溢出,就是默认图片路径不对,或网络问题加载不到时.

2.图片等比缩放(不等比的缩放实在难看).并且居中.左右的容易办,外面框的宽度定了,给一个css text-align:center,就OK了.上下居中我不习惯用标签内联属性,所以采用margin解决.

下面上我使用的两个小函数

 

//图片加载完成后按最大宽高等比缩放
function resize(o,mw,mh){
	var ow=o.width,oh=o.height,os=ow/oh,w=mw||100,h=mh||100,s=w/h;
	o.setAttribute('oldheight',oh)
	if(os>s){
		if(ow>w){
			o.width=w;o.height=w/os;
		}
	}else{
		if(oh>h){
			o.height=h;o.width=h*os
		}
	}
	if(o.height<h){
		o.style.marginTop=(h-o.height)/2+'px'
	}
}
//图片加载出错时替换成默认图片,同时也解决了ie6的over stack问题
function errorload(o,src,mw,mh){
	var w=mw||100,h=mh||100;
	var img=new Image();
	img.src=src;
	img.width=w;
	img.height=h;
	o.parentNode.replaceChild(img, o)
}

使用时直接在img标签内写上

 

<img src="原始图片路径" onload="resize(this,最大宽,最大高)" onerror="errorload(this,'默认图片路径',最大宽,最大高)" alt="*" />

这里最大宽高可以不指定,默认在函数里设为100,也可根据自己的情况修改函数.

 

2011-12-10更新

后来发现,opera和firefox等浏览器中,当img的src属性为空时,不会触发onerror事件,所以,在进行处理时一定要考虑到这种情况,可以判断下图片地址为空时,就直接返回错误图片,或者返回错误字符,就可以引发onerror事件了。