多種js圖片預加載實現(xiàn)方式分享
圖片預加載有大體有幾種方式
1.html標簽或css加載圖片
顯而易見我們使用img標簽或者通過標簽的background-image屬性都可以實現(xiàn)圖片的預加載。但是為了避免初次載入過多圖片影響體驗。一般最好在文檔渲染完成以后再加載(使用window.onload等)。
2.純js實現(xiàn)預加載
空城計-Code記的Javascript實現(xiàn)圖片的預加載的完整實現(xiàn)的預加載實例為
function preloadimages(arr){ var newimages=[], loadedimages=0 var postaction=function(){} //此處增加了一個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ù)傳遞進去 } } 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 { //此處返回一個空白對象的done方法 done:function(f){ postaction=f || postaction } } }
原理就是循環(huán)創(chuàng)建Image對象,并設置對象的src為指定圖片,然后監(jiān)聽圖片加載完成onload = function(){imageloadpost()},當圖片加載完成后就會執(zhí)行到imageloadpost。原來IE6還有一個問題:如果預加載的圖片已經(jīng)在內(nèi)存中則不會再次出發(fā)img.onload事件。但是IE7+都沒有問題了。其他瀏覽器也沒有問題,所以上面這種img.onload監(jiān)聽事件已經(jīng)沒有兼容問題了。
3.Ajax實現(xiàn)預加載
ajax請求是任何數(shù)據(jù)都可以請求的,圖片也不例外。先看一下js/css預加載
// 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預加載實際和純js預加載圖片一樣
new Image().src = "http://domain.tld/preload.png";
只不過這里的解釋成了ajax加載,可以理解new Image都是ajax get請求。
以上就是本文的全部內(nèi)容,希望對大家理解js圖片預加載有所幫助。
相關文章
JS前端知識點offset,scroll,client,冒泡,事件對象的應用整理總結
這篇文章主要介紹了JS前端知識點offset,scroll,client,冒泡,事件對象的應用,結合實例形式總結分析了offset,scroll,client,冒泡,事件對象相關功能、原理及操作注意事項,需要的朋友可以參考下2019-06-06ES6使用 Array.includes 處理多重條件用法實例分析
這篇文章主要介紹了ES6使用 Array.includes 處理多重條件用法,結合實例形式分析了Array.includes基本功能、原理及處理多重條件相關操作技巧,需要的朋友可以參考下2020-03-03用javascript實現(xiàn)的激活輸入框后隱藏初始內(nèi)容
用javascript實現(xiàn)的激活輸入框后隱藏初始內(nèi)容...2007-06-06