多種js圖片預(yù)加載實(shí)現(xiàn)方式分享
圖片預(yù)加載有大體有幾種方式
1.html標(biāo)簽或css加載圖片
顯而易見(jiàn)我們使用img標(biāo)簽或者通過(guò)標(biāo)簽的background-image屬性都可以實(shí)現(xiàn)圖片的預(yù)加載。但是為了避免初次載入過(guò)多圖片影響體驗(yàn)。一般最好在文檔渲染完成以后再加載(使用window.onload等)。
2.純js實(shí)現(xiàn)預(yù)加載
空城計(jì)-Code記的Javascript實(shí)現(xiàn)圖片的預(yù)加載的完整實(shí)現(xiàn)的預(yù)加載實(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){ postaction(newimages) //加載完成用我們調(diào)用postaction函數(shù)并將newimages數(shù)組做為參數(shù)傳遞進(jìn)去 } } for (var i=0; i<arr.length; i++){ newimages[i]=new Image() newimages[i].src=arr[i] newimages[i].onload=function(){ imageloadpost() } newimages[i].onerror=function(){ imageloadpost() } } return { //此處返回一個(gè)空白對(duì)象的done方法 done:function(f){ postaction=f || postaction } } }
原理就是循環(huán)創(chuàng)建Image對(duì)象,并設(shè)置對(duì)象的src為指定圖片,然后監(jiān)聽(tīng)圖片加載完成onload = function(){imageloadpost()},當(dāng)圖片加載完成后就會(huì)執(zhí)行到imageloadpost。原來(lái)IE6還有一個(gè)問(wèn)題:如果預(yù)加載的圖片已經(jīng)在內(nèi)存中則不會(huì)再次出發(fā)img.onload事件。但是IE7+都沒(méi)有問(wèn)題了。其他瀏覽器也沒(méi)有問(wèn)題,所以上面這種img.onload監(jiān)聽(tīng)事件已經(jīng)沒(méi)有兼容問(wèn)題了。
3.Ajax實(shí)現(xiàn)預(yù)加載
ajax請(qǐng)求是任何數(shù)據(jù)都可以請(qǐng)求的,圖片也不例外。先看一下js/css預(yù)加載
// XHR to request a JS and a CSS var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://domain.tld/preload.js'); xhr.send(''); xhr = new XMLHttpRequest(); xhr.open('GET', 'http://domain.tld/preload.css'); xhr.send('');
而圖片的ajax預(yù)加載實(shí)際和純js預(yù)加載圖片一樣
new Image().src = "http://domain.tld/preload.png";
只不過(guò)這里的解釋成了ajax加載,可以理解new Image都是ajax get請(qǐng)求。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家理解js圖片預(yù)加載有所幫助。
相關(guān)文章
JS實(shí)現(xiàn)中國(guó)公民身份證號(hào)碼有效性驗(yàn)證
這篇文章主要介紹了JS實(shí)現(xiàn)中國(guó)公民身份證號(hào)碼有效性驗(yàn)證,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02JS前端知識(shí)點(diǎn)offset,scroll,client,冒泡,事件對(duì)象的應(yīng)用整理總結(jié)
這篇文章主要介紹了JS前端知識(shí)點(diǎn)offset,scroll,client,冒泡,事件對(duì)象的應(yīng)用,結(jié)合實(shí)例形式總結(jié)分析了offset,scroll,client,冒泡,事件對(duì)象相關(guān)功能、原理及操作注意事項(xiàng),需要的朋友可以參考下2019-06-06JAVASCRIPT代碼編寫(xiě)俄羅斯方塊網(wǎng)頁(yè)版
俄羅斯方塊方塊是小時(shí)候的一個(gè)回憶,從最開(kāi)始的掌上的黑白游戲機(jī),到電視游戲機(jī),到電腦,無(wú)不有它的痕跡,今天我們來(lái)一起重溫它的一種實(shí)現(xiàn)方法,也算是整理一下我的思路吧,感興趣的小伙伴一起學(xué)習(xí)吧2015-11-11詳解JavaScript原型對(duì)象的this指向問(wèn)題
這篇文章主要為大家介紹了JavaScript原型對(duì)象的this指向問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11ES6使用 Array.includes 處理多重條件用法實(shí)例分析
這篇文章主要介紹了ES6使用 Array.includes 處理多重條件用法,結(jié)合實(shí)例形式分析了Array.includes基本功能、原理及處理多重條件相關(guān)操作技巧,需要的朋友可以參考下2020-03-03javascript中日期轉(zhuǎn)換成時(shí)間戳的小例子
javascript中日期轉(zhuǎn)換成時(shí)間戳的小例子,需要的朋友可以參考一下2013-03-03用javascript實(shí)現(xiàn)的激活輸入框后隱藏初始內(nèi)容
用javascript實(shí)現(xiàn)的激活輸入框后隱藏初始內(nèi)容...2007-06-06Js實(shí)現(xiàn)雙擊鼠標(biāo)自動(dòng)滾動(dòng)屏幕的示例代碼
這篇文章主要介紹了Js實(shí)現(xiàn)雙擊鼠標(biāo)自動(dòng)滾動(dòng)屏幕的示例代碼。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12