創建圖像對象時,可以使用「完整」屬性或「onload」方法知道何時被完全加載,然後使用一段時間處理該圖像(例如調整大小),該時間可以是幾秒鐘大文件。
如何知道瀏覽器何時完成到進程圖片加載完畢後?
編輯:在例子中可以看到「完整」的消息和圖像的外觀之間的滯後,我想避免這種情況。
例尤斯 「的onload」 的方法:如何知道瀏覽器何時完成加載後處理圖像?
var BIGimage;
\t putBIGimage();
\t function putBIGimage(){
\t \t BIGimage=document.createElement("IMG");
\t \t BIGimage.height=200;
\t \t BIGimage.src="http://orig09.deviantart.net/5e53/f/2013/347/f/d/i_don_t_want_to_ever_leave_the_lake_district_by_martinkantauskas-d6xrdch.jpg";
\t \t BIGimage.onload=function(){waitBIGimage();};
\t }
\t function waitBIGimage(){
\t \t \t console.log("Complete.");
\t \t \t document.body.appendChild(BIGimage);
\t }
實施例使用 「完全」 屬性:
var BIGimage;
\t putBIGimage();
\t function putBIGimage(){
\t \t BIGimage=document.createElement("IMG");
\t \t BIGimage.height=200;
\t \t BIGimage.src="http://orig09.deviantart.net/5e53/f/2013/347/f/d/i_don_t_want_to_ever_leave_the_lake_district_by_martinkantauskas-d6xrdch.jpg";
\t \t waitBIGimage();
\t }
\t function waitBIGimage(){
\t \t if (!BIGimage.complete){
\t \t \t console.log("Loading...");
\t \t \t setTimeout(function(){
\t \t \t \t waitBIGimage();
\t \t \t },16);
\t \t } else {
\t \t \t console.log("Complete.");
\t \t \t document.body.appendChild(BIGimage);
\t \t }
\t }
編輯:感謝@ Kaiido的響應一世 使這種溶劑等待圖像處理。
var imagesList=["https://omastewitkowski.files.wordpress.com/2013/07/howard-prairie-lake-oregon-omaste-witkowski-owfotografik-com-2-2.jpg",
\t \t "http://orig03.deviantart.net/7b8d/f/2015/289/0/f/0ffd635880709fb39c2b69f782de9663-d9d9w6l.jpg",
\t \t "http://www.livandiz.com/dpr/Crater%20Lake%20Pano%2016799x5507.JPG"];
var BIGimages=loadImages(imagesList);
onLoadImages(BIGimages,showImages);
function loadImages(listImages){
\t var image;
\t var list=[];
\t for (var i=0;i<listImages.length;i++){
\t \t image=document.createElement("IMG");
\t \t image.height=200;
\t \t image.src=listImages[i]+"?"+Math.random();
\t \t list.push(image);
\t }
\t return list; \t \t
}
function showImages(){
\t loading.style.display="none";
\t for (var i=0; i<BIGimages.length;i++){
\t \t document.body.appendChild(BIGimages[i]);
\t }
};
function onLoadImages(images,callBack,n) {
\t if (images==undefined) return null;
\t if (callBack==undefined) callBack=function(){};
\t else if (typeof callBack!="function") return null;
\t var list=[];
\t if (!Array.isArray(images)){
\t \t if (typeof images =="string") images=document.getElementById(images);
\t \t if (!images || images.tagName!="IMG") return null;
\t \t list.push(images);
\t } else list=images;
\t if (n==undefined || n<0 || n>=list.length) n=0;
\t for (var i=n; i<list.length; i++){
\t \t if (!list[i].complete){
\t \t \t setTimeout(function(){onLoadImages(images,callBack,i);},16);
\t \t \t return false;
\t \t }
\t \t var ctx = document.createElement('canvas').getContext('2d');
\t \t ctx.drawImage(list[i], 0, 0);
\t }
\t callBack();
\t return true;
}
<DIV id="loading">Loading some big images...</DIV>
第一個例子不返回預期結果嗎? – guest271314
第一種方法是首選 - 如果它不適合你,那麼你做錯了 –
在例子中可以看到「完整」的消息和圖像的外觀之間的滯後,我想避免這種情況。 –