国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript & jQuery完美判斷圖片是否加載完畢

2019-11-19 18:04:52
字體:
來源:轉載
供稿:網友

眾所周知,常見瀑布流當鼠標滾動到瀏覽器底部的時候,就會發起一個ajax的請求。在服務端生成item列表后,通過 js append到相應的div里邊。

看起來很簡單的樣子,關鍵問題就出在圖片的加載問題上,圖片一般都放在服務器上,通過http下載到客戶端。

例如我的圖片地址:

http://xxx.xxx.com/sc/item/cover/9-4352-c400.jpg

而圖片下載到本地是需要一定時間的(網速快的路過)。當圖片還沒有下載完的時候,使用js獲取到元素的寬高將會是0

有的同學說了我使用jquery的ready不就好了。如下

$(document).ready(function(){ // 在這里寫你的代碼...});

如果這么簡單就好了,我這里就說下ready與window.onload的區別。

jquery的ready只是dom的結構加載完畢,便視為加載完成。(缺點是圖片沒有加載完畢,寬高為0,程序出錯)

js的window.onload是指dom的生成和資源的加載,比如flash、圖片完全加載出來后才執行onload。(缺點就是當某一張圖片很大的時候,豈不阻止了其它js的正常執行)

知道了他們的區別后,我們再來談談如何避免錯誤和選擇性使用。

如果你進行了百度,很多人會告訴你。

這樣:

$('img').load(function(){ // 加載完成 });

好像很強大的樣子,其實不然,他的缺點是每加載一張圖片,回調函數就執行一次。好吧太煩了,我只想全部加載完走一次就可以了。當然可以,你可以進行修改如下:

va imgNum=$('img').length;$('img').load(function(){ if(!--imgNum){ // 加載完成 }});

這樣總可以了吧,我加載一張,就用圖片總數去減一,減到0我就加載完畢。看起來很完美,前提是你沒遇到IE。

IE的圖片總是從緩存文件里去拿,這就造成load方法根本就不執行,只有是新圖片才會走load

服了吧?繼續往下看。

或者是這樣:

document.getElementById('img').onload=function(){ // 加載完成 };

看我原生代碼一統天下,實際上效果甚微,一次只能處理一個你準備寫多少個document,有人說我可以用循環去綁定,經過我測試貌似根本沒效果。

還是一笑而過吧。看看我的最終解決方案(兼容:谷歌&火狐&IE)

利用圖片沒有加載完成的時候,寬高為0。我們很容易判斷圖片的一個加載情況。如下:

var t_img; // 定時器var isLoad = true; // 控制變量// 判斷圖片加載狀況,加載完成后回調isImgLoad(function(){ // 加載完成});// 判斷圖片加載的函數function isImgLoad(callback){ // 注意我的圖片類名都是cover,因為我只需要處理cover。其它圖片可以不管。 // 查找所有封面圖,迭代處理 $('.cover').each(function(){ // 找到為0就將isLoad設為false,并退出each if(this.height === 0){ isLoad = false; return false; } }); // 為true,沒有發現為0的。加載完畢 if(isLoad){ clearTimeout(t_img); // 清除定時器 // 回調函數 callback(); // 為false,因為找到了沒有加載完成的圖,將調用定時器遞歸 }else{ isLoad = true; t_img = setTimeout(function(){ isImgLoad(callback); // 遞歸掃描 },500); // 我這里設置的是500毫秒就掃描一次,可以自己調整 }}

看了我的代碼,你是否也有了自己的想法呢?

 以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江西省| 楚雄市| 克什克腾旗| 武穴市| 射洪县| 水富县| 万荣县| 太仓市| 康定县| 九江县| 平原县| 纳雍县| 天门市| 麻城市| 文昌市| 江川县| 湘西| 阳山县| 九江市| 尚义县| 河西区| 青海省| 于田县| 定安县| 长子县| 琼海市| 济宁市| 北票市| 望城县| 团风县| 东安县| 宜良县| 枣阳市| 应城市| 怀化市| 高碑店市| 沂源县| 通渭县| 方正县| 余庆县| 天峻县|