摘要:在項(xiàng)目中常常需要用到的圖片預(yù)加載效果。幸運(yùn)的是,這個(gè)功能實(shí)現(xiàn)起來并不難,我們可以使用和事件去處理決定圖片是否加載完成或者失敗?,F(xiàn)在,我們將為函數(shù)增加一個(gè)回調(diào)函數(shù)來處理后續(xù)的操作。如此之后,我們調(diào)用函數(shù)的代碼可能會(huì)如下面這樣。
在web項(xiàng)目中常常需要用到的圖片預(yù)加載效果。
下面的函數(shù)實(shí)現(xiàn)了一個(gè)我們想要的最基本的圖片預(yù)加載效果
function preloadimages(arr){ var newimages=[] var arr=(typeof arr!="object")? [arr] : arr //確保參數(shù)總是數(shù)組 for (var i=0; i我們可以通過如下的方式加載我們想要的圖片:
preloadimages(["1.gif", "2.gif", "3.gif"])上面的方法已經(jīng)可以滿足我們最基本的預(yù)加載圖片的效果了,但情況往往并不如此,我們往往需要確切的知道圖像是否被真正加載完成,并可能在后續(xù)執(zhí)行一系列對(duì)圖片的操作功能。幸運(yùn)的是,這個(gè)功能實(shí)現(xiàn)起來并不難,我們可以使用onload和onerror事件去處理決定圖片是否加載完成(或者失敗)。在本文的最終實(shí)現(xiàn)代碼中,我們將會(huì)把proloadimages()函數(shù)改造成如下的樣子。
preloadimages(["1.gif", "2.gif", "3.gif"]).done(function(images){ //當(dāng)圖片全部加載完成之后,執(zhí)行此處的代碼 //images參數(shù)是Array類型,對(duì)應(yīng)加載進(jìn)來的圖像 //images[0] 對(duì)應(yīng)的是第一張圖像 })首先我們用image對(duì)象的onload和onerror事件處理函數(shù)來檢測(cè)圖片的加載情況(成功或失?。?,改造后的代碼如下。
function preloadimages(arr){ var newimages=[], loadedimages=0 var arr=(typeof arr!="object")? [arr] : arr function imageloadpost(){ loadedimages++ if (loadedimages==arr.length){ alert("圖片已經(jīng)加載完成") } } for (var i=0; i我們可以使用代碼2的調(diào)用方法測(cè)試該函數(shù),當(dāng)圖片全部加載完成(成功或失敗)后,瀏覽器將會(huì)彈出“圖片已經(jīng)加載完成”的消息。
現(xiàn)在,我們將為preloadimages()函數(shù)增加一個(gè)回調(diào)函數(shù)來處理后續(xù)的操作。
通常我們會(huì)為我們的preloadimages()函數(shù)增加一個(gè)匿名函數(shù)做為參數(shù),來完成我們需要的功能。如此之后,我們調(diào)用preloadimages()函數(shù)的代碼可能會(huì)如下面這樣。
preloadimages(imagesarray, function(){ //圖片加載完成之后執(zhí)行的操作 })但是我們現(xiàn)在來做一點(diǎn)點(diǎn)改變,讓代碼看起來更直觀,更易于理解,改造完成之后,preloadimages()函數(shù)的調(diào)用看起來如下所示。
preloadimages(imagesarray).done(function(){ //圖片加載完成后的操作 })上面這種寫法大家一看一定都會(huì)覺得非常清晰明了,那么接下來,我們繼續(xù)來改造我們的preloadimages()函數(shù)。
function preloadimages(arr){ var newimages=[], loadedimages=0 var postaction=function(){} //此處增加了一個(gè)postaction函數(shù) var arr=(typeof arr!="object")? [arr] : arr function imageloadpost(){ loadedimages++ if (loadedimages==arr.length){ //加載完成用我們調(diào)用postaction函數(shù)并將newimages數(shù)組做為參數(shù)傳遞進(jìn)去 postaction(newimages) } } for (var i=0; i上面的代碼,我們稍作修改了幾個(gè)地方:
首先,我們?cè)黾恿艘粋€(gè)postaction函數(shù),該函數(shù)被用來做為圖片加載完成后的回調(diào)函數(shù),用戶可以在后面調(diào)用的時(shí)候用自己的處理函數(shù)覆蓋掉該函數(shù)。
第二,我們的preloadimages()函數(shù)返回了一個(gè)空對(duì)象,其中包含一個(gè)簡單的done()方法,這是實(shí)現(xiàn)本次改造的關(guān)鍵所在,確保了鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)。
最后,我們的調(diào)用變?yōu)槿缦滦问剑?/p>
preloadimages(["1.gif", "2.gif", "3.gif"]).done(function(images){ alert(images.length) //alerts 3 alert(images[0].src+" "+images[0].width) //alerts "1.gif 220" })當(dāng)然,我們還可以在done()里實(shí)現(xiàn)各種我們需要的圖片操作!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78106.html
摘要:所有依賴這個(gè)模塊的語句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。 1.模塊的寫法 模塊化編程一般都有這么幾個(gè)過渡過程,如下描述。 原始方法 function m1(){ //... } function m2(){ //... } 上面的函數(shù)m1()和m2(),組成一個(gè)模塊。使用的時(shí)候,直接調(diào)用就行了。 這種做法的缺點(diǎn)很明顯:污染了全局變量,無法保證不與...
摘要:經(jīng)過半年的打磨,正式發(fā)布,主要是新增了一些常用組件,并使用命名,為接下來的微信小程序開發(fā)做好準(zhǔn)備。這兩種方式實(shí)現(xiàn)的瀑布流式布局均支持首屏和網(wǎng)頁窗口大小改變時(shí)的列數(shù)自適應(yīng)。主要是對(duì)于標(biāo)準(zhǔn)里的布局方式草案中的布局方式進(jìn)行一些總結(jié)。 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個(gè)問題:怎樣通過 CSS 簡單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中。記得剛開始學(xué)習(xí) CSS 的時(shí)候,看...
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...
摘要:個(gè)人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開始萌生寫文章的想法,到著手...
閱讀 1769·2021-11-24 09:39
閱讀 1695·2021-11-22 15:22
閱讀 1019·2021-09-27 13:36
閱讀 3276·2021-09-24 10:34
閱讀 3348·2021-07-26 23:38
閱讀 2641·2019-08-29 16:44
閱讀 986·2019-08-29 16:39
閱讀 1116·2019-08-29 16:20