JavaScript & jQuery完美判斷圖片是否加載完畢
眾所周知,常見瀑布流當(dāng)鼠標(biāo)滾動(dòng)到瀏覽器底部的時(shí)候,就會(huì)發(fā)起一個(gè)ajax的請(qǐng)求。在服務(wù)端生成item列表后,通過 js append到相應(yīng)的div里邊。
看起來很簡單的樣子,關(guān)鍵問題就出在圖片的加載問題上,圖片一般都放在服務(wù)器上,通過http下載到客戶端。
例如我的圖片地址:
http://xxx.xxx.com/sc/item/cover/9-4352-c400.jpg
而圖片下載到本地是需要一定時(shí)間的(網(wǎng)速快的路過)。當(dāng)圖片還沒有下載完的時(shí)候,使用js獲取到元素的寬高將會(huì)是0。
有的同學(xué)說了我使用jquery的ready不就好了。如下:
$(document).ready(function(){
// 在這里寫你的代碼...
});
如果這么簡單就好了,我這里就說下ready與window.onload的區(qū)別。
jquery的ready只是dom的結(jié)構(gòu)加載完畢,便視為加載完成。(缺點(diǎn)是圖片沒有加載完畢,寬高為0,程序出錯(cuò))
js的window.onload是指dom的生成和資源的加載,比如flash、圖片完全加載出來后才執(zhí)行onload。(缺點(diǎn)就是當(dāng)某一張圖片很大的時(shí)候,豈不阻止了其它js的正常執(zhí)行)
知道了他們的區(qū)別后,我們?cè)賮碚務(wù)勅绾伪苊忮e(cuò)誤和選擇性使用。
如果你進(jìn)行了百度,很多人會(huì)告訴你。
這樣:
$('img').load(function(){
// 加載完成
});
好像很強(qiáng)大的樣子,其實(shí)不然,他的缺點(diǎn)是每加載一張圖片,回調(diào)函數(shù)就執(zhí)行一次。好吧太煩了,我只想全部加載完走一次就可以了。當(dāng)然可以,你可以進(jìn)行修改如下:
va imgNum=$('img').length;
$('img').load(function(){
if(!--imgNum){
// 加載完成
}
});
這樣總可以了吧,我加載一張,就用圖片總數(shù)去減一,減到0我就加載完畢??雌饋砗芡昝溃疤崾悄銢]遇到IE。
IE的圖片總是從緩存文件里去拿,這就造成load方法根本就不執(zhí)行,只有是新圖片才會(huì)走load。
服了吧?繼續(xù)往下看。
或者是這樣:
document.getElementById('img').onload=function(){
// 加載完成
};
看我原生代碼一統(tǒng)天下,實(shí)際上效果甚微,一次只能處理一個(gè)你準(zhǔn)備寫多少個(gè)document,有人說我可以用循環(huán)去綁定,經(jīng)過我測(cè)試貌似根本沒效果。
還是一笑而過吧??纯次业淖罱K解決方案(兼容:谷歌&火狐&IE)
利用圖片沒有加載完成的時(shí)候,寬高為0。我們很容易判斷圖片的一個(gè)加載情況。如下:
var t_img; // 定時(shí)器
var isLoad = true; // 控制變量
// 判斷圖片加載狀況,加載完成后回調(diào)
isImgLoad(function(){
// 加載完成
});
// 判斷圖片加載的函數(shù)
function isImgLoad(callback){
// 注意我的圖片類名都是cover,因?yàn)槲抑恍枰幚韈over。其它圖片可以不管。
// 查找所有封面圖,迭代處理
$('.cover').each(function(){
// 找到為0就將isLoad設(shè)為false,并退出each
if(this.height === 0){
isLoad = false;
return false;
}
});
// 為true,沒有發(fā)現(xiàn)為0的。加載完畢
if(isLoad){
clearTimeout(t_img); // 清除定時(shí)器
// 回調(diào)函數(shù)
callback();
// 為false,因?yàn)檎业搅藳]有加載完成的圖,將調(diào)用定時(shí)器遞歸
}else{
isLoad = true;
t_img = setTimeout(function(){
isImgLoad(callback); // 遞歸掃描
},500); // 我這里設(shè)置的是500毫秒就掃描一次,可以自己調(diào)整
}
}
看了我的代碼,你是否也有了自己的想法呢?
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- JS實(shí)現(xiàn)判斷圖片是否加載完成的方法分析
- JS判斷圖片是否加載完成方法匯總(最新版)
- js判斷圖片加載完成后獲取圖片實(shí)際寬高的方法
- JavaScript判斷圖片是否已經(jīng)加載完畢的方法匯總
- js 判斷圖片是否加載完以及實(shí)現(xiàn)圖片的預(yù)下載
- 使用JavaScript判斷圖片是否加載完成的三種實(shí)現(xiàn)方式
- js判斷背景圖片是否加載成功使用img的width實(shí)現(xiàn)
- 關(guān)于JS判斷圖片是否加載完成且獲取圖片寬度的方法
- js或者jquery判斷圖片是否加載完成實(shí)現(xiàn)代碼
- 如何基于JavaScript判斷圖片是否加載完成
相關(guān)文章
微信小程序項(xiàng)目總結(jié)之記賬小程序功能的實(shí)現(xiàn)(包括后端)
這篇文章主要介紹了微信小程序項(xiàng)目總結(jié)之記賬小程序功能的實(shí)現(xiàn)方法(包括后端),需要的朋友可以參考下2019-08-08
原生js基于canvas實(shí)現(xiàn)一個(gè)簡單的前端截圖工具代碼實(shí)例
這篇文章主要介紹了原生js基于canvas實(shí)現(xiàn)一個(gè)簡單的前端截圖工具代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
微信小程序?qū)崿F(xiàn)導(dǎo)航欄選項(xiàng)卡效果
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)導(dǎo)航欄選項(xiàng)卡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
JavaScript 中級(jí)筆記 第五章 面向?qū)ο蟮幕A(chǔ)
對(duì)象是JavaScript的基礎(chǔ)。從最基本的層次上說,對(duì)象是一系列屬性的集合。2009-09-09
JS實(shí)現(xiàn)點(diǎn)擊拉拽輪播圖pc端移動(dòng)端適配
本文通過實(shí)例代碼給大家介紹了JS點(diǎn)擊拉拽輪播圖pc端移動(dòng)端適配 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
layui實(shí)現(xiàn)checkbox的目錄樹tree的例子
今天小編就為大家分享一篇layui實(shí)現(xiàn)checkbox的目錄樹tree的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09

