綠色資源網:您身邊最放心的安全(quán)下載(zǎi)站! 最新軟件|熱門排行|軟件(jiàn)分類|軟件專題|廠商大全

綠(lǜ)色資源網

技術教程(chéng)
您的位(wèi)置:首頁網頁(yè)設(shè)計網頁(yè)特效 → javascript圖片預加載技術

javascript圖片預(yù)加載技術

我要評(píng)論 2011/03/15 09:55:50 來源:綠色資源網 編輯:綠色資源站 [ ] 評論:0 點擊:229次(cì)

由(yóu)於javascript無法獲取img文(wén)件頭數據,必須等待其加載(zǎi)完畢(bì)後才能(néng)獲取真實的(de)大小,所以lightbox類效果為了讓圖片居(jū)中顯示,導致其速度體驗要比直接輸出的差很多。而本文所提到(dào)的預加載技術主要是讓javascript快速(sù)獲取圖片頭部數據的尺寸。

一段(duàn)典型(xíng)的(de)使用預加載獲取圖片大小(xiǎo)的(de)例子:

var imgLoad = function (url, callback) {
var img = new Image();

img.src = url;
if (img.complete) {
callback(img.width, img.height);
} else {
img.onload = function () {
callback(img.width, img.height);
img.onload = null;
};
};

};

可以看到(dào)使用onload的方式(shì)必須等待圖(tú)片加載完畢,其速(sù)度不敢恭維。

web應用程序區別於桌麵應用程序,響應速度才是最(zuì)好的(de)用戶體(tǐ)驗。如果想(xiǎng)要速度與優雅兼得,那(nà)就必須提前獲得(dé)圖(tú)片尺寸,如何在圖片沒有加載完畢就能獲取圖片尺寸?

十多年的上網經驗告(gào)訴我:瀏覽器在加載圖片(piàn)的時候你會看到圖片會先占用一塊地然後才慢慢加載完畢,並且這裏大部分(fèn)的圖片都是沒有預設width與height屬性的,因為瀏覽器能夠獲取圖片的頭部數據。基(jī)於此,隻需要使用javascript定時偵測(cè)圖片的尺寸狀(zhuàng)態便(biàn)可得知圖片尺寸就緒的狀態。

實現代碼:

var imgReady = function (url, callback, error) {
var width, height, intervalId, check, div,
img = new Image(),
body = document.body;

img.src = url;

// 從緩(huǎn)存中讀取
if (img.complete) {
return callback(img.width, img.height);
};

// 通過占位提前獲取圖片頭部數據
if (body) {
div = document.createElement('div');
div.style.cssText = 'visibility:hidden;position:absolute;left:0;top:0;width:1px;height:1px;overflow:hidden';
div.appendChild(img)
body.appendChild(div);
width = img.offsetWidth;
height = img.offsetHeight;

check = function () {
if (img.offsetWidth !== width || img.offsetHeight !== height) {
clearInterval(intervalId);
callback(img.offsetWidth, img.clientHeight);
img.onload = null;
div.innerHTML = '';
div.parentNode.removeChild(div);
};
};

intervalId = setInterval(check, 150);
};

// 加載完畢後方式獲取
img.onload = function () {
callback(img.width, img.height);
img.onload = img.onerror = null;
clearInterval(intervalId);
body && img.parentNode.removeChild(img);
};

// 圖片(piàn)加載錯(cuò)誤
img.onerror = function () {
error && error();
clearInterval(intervalId);
body && img.parentNode.removeChild(img);
};

};

是不是很簡單?這樣(yàng)的方式獲取攝影級別照片(piàn)尺寸的(de)速(sù)度(dù)往往是onload方式的幾十(shí)多倍,而對於web普通(800×600內)瀏覽級別的圖片能達到秒殺效果。

關鍵詞:javascript

閱(yuè)讀(dú)本文後您有什麽感想? 已有 人給出評價!

  • 0 歡迎喜歡(huān)
  • 0 白癡(chī)
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙視
免费人欧美成又黄又爽的视频丨一本色道久久88综合日韩精品丨国产专区日韩精品欧美色丨午夜无遮挡男女啪啪视频丨国产欧美日韩综合精品一区二区丨亚洲精品无码不卡在线播HE丨亚洲精品国产精品国自产观看丨日韩国产高清av不卡