jquery圖片載入失敗
JavaScript判斷遠端圖片是否存在,載入完成:onerror 屬性- & jQuery實現(如果因為網路或圖片的原因發生異常,則顯示該圖片)~
</head><body><p>判斷百度的LOGO是否存在:<br><IMG src="http://www.baidu.com/img/baidu_logo.gif" onerror="javascript:this.src="http://endual.iteye.com/images/logo.jpg" rel="nofollow"/>></p><p>如果不存在,則替換成本地網站logo:<br><IMG src="http://www.baidu.com/img/baidu_logo11.gif" onerror="javascript:this.src="http://endual.iteye.com/images/logo.gif" rel="nofollow"/>></p></body></html>
1234567 |
根據此屬性用js建立影象物件:
格式:
影象物件名稱=new Image([寬度],[高度])
影象物件的屬性:
border complete height hspace lowsrc name src vspace width readyState
影象物件的事件:
onabort onerror onkeydown onkeypress onkeyup onload onreadystatechange
程式程式碼
var img=new Image();
img.onload=function(){alert("img is loaded")}; //它在影象完全載入到記憶體之後呼叫。
img.onerror=function(){alert("error!")};//它在影象載入失敗後呼叫,影象載入失敗不會呼叫onload事件。
img.src="http://endual.iteye.com/blog/image1.jpg" rel="nofollow"/>
function show(){alert("body is loaded");};
window.onload=show;
執行上面的程式碼後,在不同的瀏覽器中進行測試,發現IE和FF是有區別的,在FF中,img物件的載入包含在body的載入過程中,既是img載入完之後,body才算是載入完畢,觸發window.onload事件。
在IE中,img物件的載入是不包含在body的載入過程之中的,body載入完畢,window.onload事件觸發時,img物件可能還未載入結束,img.onload事件會在window.onload之後觸發。
根據上面的問題,考慮到瀏覽器的相容性和網頁的載入時間,儘量不要在Image物件裡放置過多的圖片,否則在FF下會影響網頁的下載速度。當然如果你在 window.onload之後,執行預載入函式,就不會FF中的問題了。
對於onload事件的繫結,不要放在src="http://endual.iteye.com/blog/’……’語句後面,因為載入圖片的速度可能很快,如果圖片載入完畢後,繫結onload事件的程式碼還沒來得及執行,就會造成繫結到onload事件的函式沒機會執行。其他事件的繫結也要注意這一點。
程式碼簡化後如下:
var img = new Image();
img.src="http://endual.iteye.com/blog/“test.gif”;
簡單看過以後貌似這段程式碼沒有什麼問題,可是IE下就不是能正常的執行。不管怎麼檢測,IE根本不會理會,不過還是找到了解決的方法,原理如下:
圖片下載時,瀏覽器會把圖片快取起來,再次載入此圖片時就會從緩衝區里加載。
那麼如果圖片已經在快取區了,是不是從緩衝區里加載的圖片就不觸發onload事件呢?
測試……
var img = new Image();
img.onload = function(){
alert(this.src);
//other
};
img.src="http://endual.iteye.com/blog/“test.gif”;
測試成功!
結論:應該把onload寫到src前面,先告訴瀏覽器圖片載入完要怎麼處理,再讓它去載入圖片。 所以,不是IE瀏覽器不會觸發onload事件,而是因為載入緩衝區的速度太快,在沒有告訴它載入完要怎麼辦時,它已經載入完了。反過來說,firefox明顯更智慧一些,加入onload事件後,firefox瀏覽器會檢測緩衝區是否已經有此圖片,有的話直接就觸發此事件!
img 判斷圖片載入完成:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 //EN"> <html><head></head><body><script> //判斷瀏覽器var Browser=new Object(); Browser.userAgent=window.navigator.userAgent.toLowerCase();Browser.ie=/msie/.test(Browser.userAgent);Browser.Moz=/gecko/.test(Browser.userAgent); //判斷是否載入完成function Imagess(url,imgid,callback){ var val=url; var img=new Image(); if(Browser.ie){ img.onreadystatechange =function(){ if(img.readyState=="complete"||img.readyState=="loaded"){ callback(img,imgid); } } }else if(Browser.Moz){ img.onload=function(){ if(img.complete==true){ callback(img,imgid); } } } //如果因為網路或圖片的原因發生異常,則顯示該圖片 img.onerror=function(){img.src="http://www.baidu.com/img/baidu_logo.gif" rel="nofollow"/> img.src="http://endual.iteye.com/blog/val;" rel="nofollow"/>} //顯示圖片function checkimg(obj,imgid){ document.getElementById(imgid).src="http://endual.iteye.com/blog/obj.src;" rel="nofollow"/>}//初始化需要顯示的圖片,並且指定顯示的位置window.onload=function(){ Imagess("http://pic.cnblogs.com/avatar/a46603.jpg","img1",checkimg); Imagess("http://pic.cnblogs.com/avatar/a46603.jpg","img2",checkimg); Imagess("http://pic.cnblogs.com/avatar/a46603.jpg","img3",checkimg); Imagess("http://pic.cnblogs.com/avatar/a46603.jpg","img4",checkimg); Imagess("http://pic.cnblogs.com/avatar/a46603.jpgdddddddddddddddddddddddd","img5",checkimg);}</script><img id="img1" src="loading.gif" width="100" height="100" /><img id="img2" src="loading.gif" width="100" height="100" /><img id="img3" src="loading.gif" width="100" height="100" /><img id="img4" src="loading.gif" width="100" height="100" /><img id="img5" src="loading.gif" width="100" height="100" /></body></html>
jQuery實現:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head> <title>無標題頁</title> <script language="javascript" type="text/javascript" src="http://www.mainaer.com/JS/jquery-1-3-2.js"></script></head><body> <div><img src="http://www.mainaer.com/skin/maps/4.png" /><img src="http://www.mainaer.com/skin/maps/5_R.png" /><img src="http://www.mainaer.com/skin/maps/6.png" /><img src="http://www.mainaer.com/skin/maps/7.png" /><img src="http://www.mainaer.com/skin/maps/8.png" /></div><div id="msgTool"> </div> <script language="javascript" type="text/javascript"> $(function (){ $("img").each(function (i,e){ var imgsrc="http://endual.iteye.com/blog/$(e).attr(" rel="nofollow"/> $(e).load(function(){ $("<p> ok "+ $(e).width()+":"+$(e).height()+"</p>").appendTo("#msgTool"); }).error(function() { $("<p> error "+ imgsrc +"</p>").appendTo("#msgTool"); $(e).attr("src","http://www.mainaer.com/uploadfiles/mainaer/nopic.gif"); }) ; }); }); </script></body></html>