目錄
1. 使用jQuery圖片預(yù)加載(延遲加載)插件Lazy LoadLazy Load也叫惰性加載,延遲加載,顧名思義,就是在圖片未到達可視區(qū)域時,不加載圖片,我們常常在很多的優(yōu)秀網(wǎng)站上看到類似的例子,例如迅雷、土豆、優(yōu)酷等,由于一個網(wǎng)頁的圖片非常多,一次性加載增加服務(wù)器壓力,而且用戶未必會拉到底部,浪費用戶流量,Lazy Load采用按需加載,更快的加載速度從而達到優(yōu)化網(wǎng)頁的目的。 使用方法:
原文鏈接: jQuery圖片預(yù)加載(延遲加載)插件Lazy Load 2. JS實現(xiàn)圖片預(yù)加載在瀏覽器渲染圖片的時候, 它獲得圖片的一片區(qū)域的時候, 就已經(jīng)為這張圖片預(yù)留了一片空白的區(qū)域來填充圖片, 這就是預(yù)加載獲得圖片尺寸最原始的使用方法. 有時候會加載一些在當(dāng)前頁面沒有用到的圖片,是為了提前加載到緩存里,這樣后面的頁面就可以直接從緩存讀取了。 加載大圖的時候,我們可以先顯示模糊的縮略圖,等到大圖加載完了,再把縮略圖替換掉,這樣填補了圖片加載期間的空白時間。 image也有onload和onerror事件,分別是加載完后和加載失敗時執(zhí)行。 Image對象是專門用于處理圖片加載的,就相當(dāng)于內(nèi)存中的img標(biāo)簽。 圖片預(yù)加載案例:鼠標(biāo)移入一張圖片時,換成另一張圖片,移出時換回原來的圖片。正常做法是,鼠標(biāo)移入的時候,改變圖片的src,但這時就要去加載圖片了,會等待一段時間,這樣體驗不好。預(yù)加載的做法是,在頁面加載完,鼠標(biāo)移入之前就通過Image對象把圖片加載進緩存了,這樣鼠標(biāo)移入的時候直接從緩存里讀取了,速度很快。
但整體來講,仍然應(yīng)該先進行onload事件的綁定, 再賦值src 參考:[前端] 圖片預(yù)加載及獲取屬性 關(guān)于圖片的預(yù)加載,你所不知道的 3. 用CSS實現(xiàn)圖片的預(yù)加載這個概念就是寫一個CSS樣式設(shè)置一批背景圖片,然后將其隱藏,這樣你就看不到那些圖片了。那些背景圖片就是你想預(yù)載的圖片。
這里為了隱藏這些圖片, 使用了位置設(shè)置為極大的負值的方法. 還可以直接設(shè)置 { width: 0; height: 0; display: none}; 該方法雖然高效,但仍有改進余地。使用該法加載的圖片會同頁面的其他內(nèi)容一起加載,增加了頁面的整體加載時間。為了解決這個問題,我們增加了一些JavaScript代碼,來推遲預(yù)加載的時間,直到頁面加載完畢。代碼如下: // better image preloading @ <a href="http:///press/2009/12/28/3-ways-preload-images-css-javascript-ajax/">http:///press/2009/12/28/3-ways-preload-images-css-javascript-ajax/</a> function preloader() { if (document.getElementById) { document.getElementById("preload-01").style.background = "url(http://d/image-01.png) no-repeat -9999px -9999px"; document.getElementById("preload-02").style.background = "url(http://d/image-02.png) no-repeat -9999px -9999px"; document.getElementById("preload-03").style.background = "url(http://d/image-03.png) no-repeat -9999px -9999px"; } } function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } } addLoadEvent(preloader); 在該腳本的第一部分,我們獲取使用類選擇器的元素,并為其設(shè)置了background屬性,以預(yù)加載不同的圖片。 該腳本的第二部分,我們使用addLoadEvent()函數(shù)來延遲preloader()函數(shù)的加載時間,直到頁面加載完畢。 如果JavaScript無法在用戶的瀏覽器中正常運行,會發(fā)生什么?很簡單,圖片不會被預(yù)加載,當(dāng)頁面調(diào)用圖片時,正常顯示即可。 參考: 純CSS圖片預(yù)加載 Javascript圖片預(yù)加載詳解 4. 使用Ajax實現(xiàn)預(yù)加載該方法利用DOM,不僅僅預(yù)加載圖片,還會預(yù)加載CSS、JavaScript等相關(guān)的東西。使用Ajax,比直接使用JavaScript,優(yōu)越之處在于JavaScript和CSS的加載不會影響到當(dāng)前頁面。該方法簡潔、高效。 window.onload = function() { setTimeout(function() { // XHR to request a JS and a CSS var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://d/preload.js'); xhr.send(''); xhr = new XMLHttpRequest(); xhr.open('GET', 'http://d/preload.css'); xhr.send(''); // preload image new Image().src = "http://d/preload.png"; }, 1000); }; 上面代碼預(yù)加載了“preload.js”、“preload.css”和“preload.png”。1000毫秒的超時是為了防止腳本掛起,而導(dǎo)致正常頁面出現(xiàn)功能問題。 與之相比, 如果用js的話, 要實現(xiàn)以上加載過程則會應(yīng)用到頁面上. 實現(xiàn)如下 window.onload = function() { setTimeout(function() { // reference to <head> var head = document.getElementsByTagName('head')[0]; // a new CSS var css = document.createElement('link'); css.type = "text/css"; css.rel = "stylesheet"; css.href = "http://d/preload.css"; // a new JS var js = document.createElement("script"); js.type = "text/javascript"; js.src = "http://d/preload.js"; // preload JS and CSS head.appendChild(css); head.appendChild(js); // preload image new Image().src = "http://d/preload.png"; }, 1000); };
這里,我們通過DOM創(chuàng)建三個元素來實現(xiàn)三個文件的預(yù)加載。正如上面提到的那樣,使用Ajax,加載文件不會應(yīng)用到加載頁面上。從這點上看,Ajax方法優(yōu)越于JavaScript。 |
|