這次帶給大家JQuery呼叫Ajax載入圖片,JQuery呼叫Ajax載入圖片的注意事項有哪些,下面就是實戰案例,一起來看一下。
最先想到的思路是利用緩存,也就是先顯示提示訊息,然後get圖片,在get完的時候回調,將img標籤的src改掉,由於剛剛get過,有了緩存,所以圖片會立刻顯示出來。
頁面元素:
<input class="picbtn" type="button" value="Next" /> <p class="tip">正在加载……</p> <p class="notice"> <img /> </p>
按鈕的事件綁定:
$(".picbtn").click(function(){NextPic();});
定義了一個陣列PicArr用來記錄所有圖片
NextPic內容:
$(".tip").slideDown(200); //显示提示 $.get(PicArr[CurrPic],function(){ $("img").attr("src",PicArr[CurrPic]); $(".tip").slideUp(200); CurrPic++; if(CurrPic>4) CurrPic=0; });
在CHROME和FF下顯示正常,IE6下異常,IE7、8未測試。
後來在ASPRAIN的開發者 稽山草 的幫助下,思路改成了先改src,然後綁定onload事件,在onload中回調。
核心程式碼:
$("img").attr("src",PicArr[CurrPic]) .bind('load',function(){$(".tip").slideUp(200);CurrPic++;if(CurrPic>4)CurrPic=0;});
後來一看基本上正常了,但仔細看還是不正常,圖片順序開始亂跳,追蹤了好久發現回呼函數會多次運行。
中間想到會不會是事件綁定的問題,因為onclick事件的綁定是
$(Element).bind("click",callback)
可以簡寫成
$(Element).click(callback)
想到$(Element).bind( "load",callback)和$(Element).load(url,callback)會不會是一樣,查資料寫得都不怎麼清楚,改了試一下,還是不一樣,不過在chrome和ff下依然能工作,但是數據不太正常,IE下報錯。
再次檢查 稽山草 給的程式碼,發現問題在哪裡了。
load事件的綁定的是一個匿名函數,而當按鈕按下時會再次綁定,所以會重複執行。於是將綁定bind改成one搞定。最終完整程式碼如下:
<!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> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>JQUERY动态加载图片</title> <script type="text/javascript" src="jquery/jquery-1.3.2.min.js"></script> <script type="text/javascript"> (function($){ $.NextPic=function() { $(".tip").slideDown(200); $("img").attr("src",PicArr[CurrPic]).one('load',function(){$(".tip").slideUp(200);CurrPic++;if(CurrPic>4)CurrPic=0;}); //$("img").load(PicArr[CurrPic],function(){$(this).attr("src",PicArr[CurrPic]);$(".tip").slideUp(200);alert(CurrPic);CurrPic++;if(CurrPic>4)CurrPic=0;}); } })(jQuery); $(document).ready(function(){ PicArr = new Array("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg"); CurrPic=0; $(".tip").css({"position":"absolute","top":"100px","left":"50px"}); $(".tip").hide(); $(".scoll").click(function(){$.NextPic();}); }) </script> </head> <body> <input class="picbtn" type="button" value="Next" /> <p class="tip">正在加载……</p> <p class="notice"> <img id="img"/> </p> </body> </html>
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是JQuery呼叫Ajax載入圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!