通过Image 对象动态装载图片,不可能立即得到图片的问题
生活随笔
收集整理的這篇文章主要介紹了
通过Image 对象动态装载图片,不可能立即得到图片的问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
//JS縮略圖正確的方法
var imgView = document.getElementById("imgview");
var imgObj = new Image();
imgObj.src = imgUrl;
function thumbImg(imgObj){
???????if (typeof(imgObj) == 'object'){
?????????????if ((imgObj.width != 0) && (imgObj.height != 0)){
????????????????????var z = NewSize(imgObj.width, imgObj.height, imgW, imgH);?? //調(diào)用壓縮函數(shù)
????????????????????imgView.setAttribute("src", imgObj.src);
????????????????????imgView.style.width = z.w + "px";?
????????????????????imgView.style.height = z.h + "px";
?????????????}else{
???????????????????//setTimeout(thumbImg(imgObj), 100);?? //這樣會(huì)產(chǎn)生溢出,
?????????????????? setTimeout(' thumbImg (imgObj) ' ,? '100');? //這樣好一點(diǎn)
?????????????}
???????}
};
需要注意的是,由于setTimeout函數(shù)是時(shí)間過程,所以執(zhí)行的代碼必須安排在函數(shù)thumbImg里面,而不能放在外面執(zhí)行。
因此,凡是有 setTimeOut或 setInterval 的函數(shù),其實(shí)現(xiàn)必須放在代碼中,而不能放在外部,也不能返回一個(gè)值。
他是 void 類型,而不是 return 類型。
---------------------------
//預(yù)加載一組圖片的正確方法
var arrImg = new Array();
... 循環(huán)載入圖片名稱...
var imgList = new Array();
var imgSize = new Array();
var iTimer = null;
?for(var i=0; i<arrImg.length; i++){
???????? var img = new Image();
???????? img.src =? arrImg[i];
?????????addImg(img);
???????? img = null;
?};
function addImg(imgObj){
?????if(typeof(imgObj) == 'object'){
????????????if(imgObj.width !=0 && imgObj.height !=0){
??????????????? ?imgList.Add(imgObj);
??????????????? ?imgSize.Add(NewSize(imgObj.width, imgObj.height, imgW, imgH));
???????????????? clearTimeout(iTimer); imgObj = null; iTimer = null;
?????????? ?}else{
??????????????? ?iTimer = setTimeout( 'thumbImg(imbObj)' ,? '100' );? //注意要加上引號(hào)
?????????? }
?????}
?};
這樣才能確保圖片被真正預(yù)加載了,直接給 image對(duì)象賦予src值,并不能馬上加載,他有個(gè)延遲的問題。
var imgView = document.getElementById("imgview");
var imgObj = new Image();
imgObj.src = imgUrl;
function thumbImg(imgObj){
???????if (typeof(imgObj) == 'object'){
?????????????if ((imgObj.width != 0) && (imgObj.height != 0)){
????????????????????var z = NewSize(imgObj.width, imgObj.height, imgW, imgH);?? //調(diào)用壓縮函數(shù)
????????????????????imgView.setAttribute("src", imgObj.src);
????????????????????imgView.style.width = z.w + "px";?
????????????????????imgView.style.height = z.h + "px";
?????????????}else{
???????????????????//setTimeout(thumbImg(imgObj), 100);?? //這樣會(huì)產(chǎn)生溢出,
?????????????????? setTimeout(' thumbImg (imgObj) ' ,? '100');? //這樣好一點(diǎn)
?????????????}
???????}
};
需要注意的是,由于setTimeout函數(shù)是時(shí)間過程,所以執(zhí)行的代碼必須安排在函數(shù)thumbImg里面,而不能放在外面執(zhí)行。
因此,凡是有 setTimeOut或 setInterval 的函數(shù),其實(shí)現(xiàn)必須放在代碼中,而不能放在外部,也不能返回一個(gè)值。
他是 void 類型,而不是 return 類型。
---------------------------
//預(yù)加載一組圖片的正確方法
var arrImg = new Array();
... 循環(huán)載入圖片名稱...
var imgList = new Array();
var imgSize = new Array();
var iTimer = null;
?for(var i=0; i<arrImg.length; i++){
???????? var img = new Image();
???????? img.src =? arrImg[i];
?????????addImg(img);
???????? img = null;
?};
function addImg(imgObj){
?????if(typeof(imgObj) == 'object'){
????????????if(imgObj.width !=0 && imgObj.height !=0){
??????????????? ?imgList.Add(imgObj);
??????????????? ?imgSize.Add(NewSize(imgObj.width, imgObj.height, imgW, imgH));
???????????????? clearTimeout(iTimer); imgObj = null; iTimer = null;
?????????? ?}else{
??????????????? ?iTimer = setTimeout( 'thumbImg(imbObj)' ,? '100' );? //注意要加上引號(hào)
?????????? }
?????}
?};
這樣才能確保圖片被真正預(yù)加載了,直接給 image對(duì)象賦予src值,并不能馬上加載,他有個(gè)延遲的問題。
轉(zhuǎn)載于:https://www.cnblogs.com/sw22225458/archive/2008/01/05/1026835.html
總結(jié)
以上是生活随笔為你收集整理的通过Image 对象动态装载图片,不可能立即得到图片的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 唐朝四大口岸
- 下一篇: 祝福老板多赚钱的话语 祝老板发财的句子简