利用javascript解決圖片縮放及其優(yōu)化的代碼
更新時(shí)間:2012年05月23日 22:20:07 作者:
說(shuō)起IE6,真是讓我們這些做前端的人又恨又無(wú)奈,許多屬性都不支持??刹簧儆脩暨€在用它,我們也不能無(wú)視。為了兼容,我只好跟同事請(qǐng)教了一下,然后針對(duì)IE6用js縮放來(lái)顯示圖片并進(jìn)行了一些細(xì)節(jié)上的優(yōu)化
一個(gè)客戶跟我聯(lián)系說(shuō),剛給他做的網(wǎng)站,顯示不正常,我頓時(shí)一緊張,這是我獨(dú)立完成的第一個(gè)項(xiàng)目,于是趕緊打開他的網(wǎng)站看了看,沒(méi)看出什么不正常來(lái)。我又問(wèn)他怎么不正常,他說(shuō)和交接項(xiàng)目時(shí)的效果不一樣,暈,交接時(shí)要是不正常,項(xiàng)目肯定交接不了啊,干脆讓他截個(gè)圖過(guò)來(lái)。果然不正常,是他剛上傳的一張圖片把顯示內(nèi)容的窗口撐開了。查看代碼,明明寫好了max-width,怎么還會(huì)出現(xiàn)這種情況。突然發(fā)現(xiàn)他發(fā)來(lái)的圖上,那個(gè)瀏覽器看著不順眼,像是古老的而神圣的IE6!經(jīng)過(guò)確認(rèn),果然是它,又是它!我真是疏忽,沒(méi)給他在IE6下測(cè)試就交工了。
說(shuō)起IE6,真是讓我們這些做前端的人又恨又無(wú)奈,許多屬性都不支持。可不少用戶還在用它,我們也不能無(wú)視。為了兼容,我只好跟同事請(qǐng)教了一下,然后針對(duì)IE6用js縮放來(lái)顯示圖片并進(jìn)行了一些細(xì)節(jié)上的優(yōu)化。
盡管今天的這個(gè)客戶網(wǎng)站比較小,對(duì)網(wǎng)站性能的要求也不高,但考慮以后可能還會(huì)用到這些東西,做優(yōu)化是個(gè)長(zhǎng)期學(xué)習(xí)的過(guò)程,我查閱了一些文章,說(shuō)是如果利用img標(biāo)簽的onload方法來(lái)調(diào)用函數(shù)進(jìn)行尺寸的修改,對(duì)性能的影響比較大,另外,利用 -expression 行為似乎也不可?。ㄒ院罄^續(xù)求證吧),所以,最后是采用頁(yè)面加載時(shí)觸發(fā)。
function resizeImage(img,width){
var image=new Image();
image.src=img.src;
var temp = image.width;
img.width = temp = (temp>width)?width:temp;
img.style.display = "inline";
}
function doResize(){
if($.browser.version==6&&$.browser.msie) $("img").each(function(){resizeImage(this,100)});
}
window.onload = doResize;
這段代碼利用resizeImage函數(shù)判斷,并且修改img.width屬性,原理比較簡(jiǎn)單,在這段代碼前面我還加了一個(gè)對(duì)IE6瀏覽器的判定,除了它以外,我還是讓CSS搞定圖片的尺寸。我在代碼中沒(méi)有定義圖片的高和寬的數(shù)值,這樣在縮放時(shí),只要修改其中的一個(gè)數(shù)值,讓另一個(gè)數(shù)值去自適應(yīng),而不是讓js去執(zhí)行等比縮放,這也算是一點(diǎn)點(diǎn)優(yōu)化吧。我在代碼中引用了Jquery(因?yàn)榱?xí)慣了),你沒(méi)必要這樣做,我之所以這么寫,是在DOM元素返回以后可以統(tǒng)一進(jìn)行函數(shù)處理。考慮到客戶經(jīng)常會(huì)使用外鏈的圖片,這時(shí),網(wǎng)頁(yè)的顯示速度就受到圖片源的影響,所以在頁(yè)面加載時(shí)我先利用CSS把需要顯示的圖片隱藏,直到圖片縮放后再利用js的方法顯示圖片,因此,又對(duì)IE6做了個(gè)hack:
img{
display:inline !important;
display:none;
max-width:180px;
}
說(shuō)起IE6,真是讓我們這些做前端的人又恨又無(wú)奈,許多屬性都不支持。可不少用戶還在用它,我們也不能無(wú)視。為了兼容,我只好跟同事請(qǐng)教了一下,然后針對(duì)IE6用js縮放來(lái)顯示圖片并進(jìn)行了一些細(xì)節(jié)上的優(yōu)化。
盡管今天的這個(gè)客戶網(wǎng)站比較小,對(duì)網(wǎng)站性能的要求也不高,但考慮以后可能還會(huì)用到這些東西,做優(yōu)化是個(gè)長(zhǎng)期學(xué)習(xí)的過(guò)程,我查閱了一些文章,說(shuō)是如果利用img標(biāo)簽的onload方法來(lái)調(diào)用函數(shù)進(jìn)行尺寸的修改,對(duì)性能的影響比較大,另外,利用 -expression 行為似乎也不可?。ㄒ院罄^續(xù)求證吧),所以,最后是采用頁(yè)面加載時(shí)觸發(fā)。
復(fù)制代碼 代碼如下:
function resizeImage(img,width){
var image=new Image();
image.src=img.src;
var temp = image.width;
img.width = temp = (temp>width)?width:temp;
img.style.display = "inline";
}
function doResize(){
if($.browser.version==6&&$.browser.msie) $("img").each(function(){resizeImage(this,100)});
}
window.onload = doResize;
這段代碼利用resizeImage函數(shù)判斷,并且修改img.width屬性,原理比較簡(jiǎn)單,在這段代碼前面我還加了一個(gè)對(duì)IE6瀏覽器的判定,除了它以外,我還是讓CSS搞定圖片的尺寸。我在代碼中沒(méi)有定義圖片的高和寬的數(shù)值,這樣在縮放時(shí),只要修改其中的一個(gè)數(shù)值,讓另一個(gè)數(shù)值去自適應(yīng),而不是讓js去執(zhí)行等比縮放,這也算是一點(diǎn)點(diǎn)優(yōu)化吧。我在代碼中引用了Jquery(因?yàn)榱?xí)慣了),你沒(méi)必要這樣做,我之所以這么寫,是在DOM元素返回以后可以統(tǒng)一進(jìn)行函數(shù)處理。考慮到客戶經(jīng)常會(huì)使用外鏈的圖片,這時(shí),網(wǎng)頁(yè)的顯示速度就受到圖片源的影響,所以在頁(yè)面加載時(shí)我先利用CSS把需要顯示的圖片隱藏,直到圖片縮放后再利用js的方法顯示圖片,因此,又對(duì)IE6做了個(gè)hack:
復(fù)制代碼 代碼如下:
img{
display:inline !important;
display:none;
max-width:180px;
}
您可能感興趣的文章:
- Javascript前端優(yōu)化代碼
- 通過(guò)循環(huán)優(yōu)化 JavaScript 程序
- js尾調(diào)用優(yōu)化的實(shí)現(xiàn)
- 淺析JavaScript異步代碼優(yōu)化
- JavaScript關(guān)于提高網(wǎng)站性能的幾點(diǎn)建議(一)
- JavaScript提高網(wǎng)站性能優(yōu)化的建議(二)
- JS 網(wǎng)站性能優(yōu)化筆記
- 網(wǎng)站性能提高實(shí)戰(zhàn)經(jīng)驗(yàn)點(diǎn)滴記錄
- 詳解網(wǎng)站中圖片日常使用以及優(yōu)化手法
- 圖片該如何優(yōu)化來(lái)提高網(wǎng)站性能
相關(guān)文章
DOM Scripting中的圖片切換[兼容Firefox]
dom scripting確實(shí)是一本對(duì)javascript dom編程很有指導(dǎo)意義的書,今天看了書中一個(gè)簡(jiǎn)單的圖片切換實(shí)例,感覺(jué)很有意思。2010-06-06JavaScript 控制圖片改變重疊順序的代碼(鼠標(biāo)移動(dòng)切換)
JavaScript實(shí)例,通過(guò)控制Html網(wǎng)頁(yè)元素,來(lái)控制圖片的重疊順序,鼠標(biāo)移上某一張,那一張就顯示在最前面,移動(dòng)到最后層,它會(huì)顯示在最前,有意思吧,其實(shí)挺簡(jiǎn)單。2010-10-10JS實(shí)現(xiàn)鼠標(biāo)移動(dòng)到縮略圖顯示大圖的圖片放大效果
一個(gè)網(wǎng)頁(yè)上用的圖片提示效果,當(dāng)把鼠標(biāo)移動(dòng)到圖片縮略圖的時(shí)候,會(huì)顯示圖片大圖,似乎在網(wǎng)上這是個(gè)很常見(jiàn)的效果,實(shí)現(xiàn)方法也比較多,有人用CSS,有人用JavaScript,有人用jQuery,總之,選擇自己習(xí)慣的方式去實(shí)現(xiàn),就是最棒的。2012-12-12用javascript實(shí)現(xiàn)圖片馬賽克后顯示并切換
用javascript實(shí)現(xiàn)圖片馬賽克后顯示并切換...2007-04-04彈出自適應(yīng)圖片大小的窗口彈出窗口根據(jù)圖片大小,自動(dòng)判斷高和寬。
彈出自適應(yīng)圖片大小的窗口彈出窗口根據(jù)圖片大小,自動(dòng)判斷高和寬。...2006-12-12純CSS實(shí)現(xiàn)的漂亮的立體圖片邊框效果,陰影代碼
純CSS 漂亮的立體圖片邊框效果,圖片陰影代碼,個(gè)人覺(jué)得這個(gè)挺實(shí)用,CSs實(shí)現(xiàn)的,定義成類,可讓你整個(gè)網(wǎng)頁(yè)上的圖片都是有立體陰影的,不錯(cuò)吧,感謝作者分享。2010-10-10