摘要:當(dāng)頁面圖片很多時(shí),頁面的加載速度緩慢,幾鐘內(nèi)頁面沒有加載完成,也許會(huì)失去很多的用戶。指向一張默認(rèn)的圖片,否則當(dāng)為空時(shí)也會(huì)向服務(wù)器發(fā)送一次請(qǐng)求。這樣便實(shí)現(xiàn)了懶加載。我想實(shí)現(xiàn)限制觸發(fā)頻率,來優(yōu)化性能。
本文標(biāo)題:實(shí)現(xiàn)圖片懶加載(lazyload)
文章作者:Jake
發(fā)布時(shí)間:2016-11-26, 18:46:34
最后更新:2016-11-28, 17:12:59
原始鏈接:http://i.jakeyu.top/2016/11/26/實(shí)現(xiàn)圖片懶加載/
許可協(xié)議: "署名-非商用-相同方式共享 4.0" 轉(zhuǎn)載請(qǐng)保留原文鏈接及作者。
對(duì)頁面加載速度影響最大的就是圖片,一張普通的圖片可以達(dá)到幾M的大小,而代碼也許就只有幾十KB。當(dāng)頁面圖片很多時(shí),頁面的加載速度緩慢,幾S鐘內(nèi)頁面沒有加載完成,也許會(huì)失去很多的用戶。
所以,對(duì)于圖片過多的頁面,為了加速頁面加載速度,所以很多時(shí)候我們需要將頁面內(nèi)未出現(xiàn)在可視區(qū)域內(nèi)的圖片先不做加載, 等到滾動(dòng)到可視區(qū)域后再去加載。這樣子對(duì)于頁面加載性能上會(huì)有很大的提升,也提高了用戶體驗(yàn)。
原理將頁面中的img標(biāo)簽src指向一張小圖片或者src為空,然后定義data-src(這個(gè)屬性可以自定義命名,我才用data-src)屬性指向真實(shí)的圖片。src指向一張默認(rèn)的圖片,否則當(dāng)src為空時(shí)也會(huì)向服務(wù)器發(fā)送一次請(qǐng)求。可以指向loading的地址。
注:圖片要指定寬高
當(dāng)載入頁面時(shí),先把可視區(qū)域內(nèi)的img標(biāo)簽的data-src屬性值負(fù)給src,然后監(jiān)聽滾動(dòng)事件,把用戶即將看到的圖片加載。這樣便實(shí)現(xiàn)了懶加載。
代碼在寫代碼前,需要了解各種高度。先看這篇文章scrollTop,offsetTop,scrollLeft,offsetLeft
JavaScript jQuery 使用節(jié)流函數(shù)進(jìn)行性能優(yōu)化Document
如果直接將函數(shù)綁定在scroll事件上,當(dāng)頁面滾動(dòng)時(shí),函數(shù)會(huì)被高頻觸發(fā),這非常影響瀏覽器的性能。
我想實(shí)現(xiàn)限制觸發(fā)頻率,來優(yōu)化性能。
節(jié)流函數(shù):只允許一個(gè)函數(shù)在N秒內(nèi)執(zhí)行一次。下面是一個(gè)簡(jiǎn)單的節(jié)流函數(shù):
// 簡(jiǎn)單的節(jié)流函數(shù) //fun 要執(zhí)行的函數(shù) //delay 延遲 //time 在time時(shí)間內(nèi)必須執(zhí)行一次 function throttle(fun, delay, time) { var timeout, startTime = new Date(); return function() { var context = this, args = arguments, curTime = new Date(); clearTimeout(timeout); // 如果達(dá)到了規(guī)定的觸發(fā)時(shí)間間隔,觸發(fā) handler if (curTime - startTime >= time) { fun.apply(context, args); startTime = curTime; // 沒達(dá)到觸發(fā)間隔,重新設(shè)定定時(shí)器 } else { timeout = setTimeout(fun, delay); } }; }; // 實(shí)際想綁定在 scroll 事件上的 handler function lazyload(event) { for (var i = n; i < imgNum; i++) { if (img.eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop())) { if (img.eq(i).attr("src") == "default.jpg") { var src = img.eq(i).attr("data-src"); img.eq(i).attr("src", src); n = i + 1; } } } } // 采用了節(jié)流函數(shù) window.addEventListener("scroll",throttle(lazyload,500,1000));
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/115358.html
摘要:幾個(gè)月前實(shí)現(xiàn)的一個(gè)圖片懶加載庫,地址。而這是我們可以優(yōu)化的地方,這里我們使用函數(shù)去抖,調(diào)整后的代碼如下至此,也算是實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的圖片懶加載庫了,如有不足之處歡迎指正,大家一起交流交流 幾個(gè)月前實(shí)現(xiàn)的一個(gè)圖片懶加載庫lazyload.js,github 地址。 需要實(shí)現(xiàn)的效果 相信大家都在網(wǎng)頁中體驗(yàn)過圖片懶加載,它應(yīng)該有這樣的效果:當(dāng)圖片進(jìn)入我們的可視區(qū)時(shí),加載這些圖片。其原因相信大家...
摘要:當(dāng)頁面圖片很多時(shí),頁面的加載速度緩慢,幾鐘內(nèi)頁面沒有加載完成,也許會(huì)失去很多的用戶。指向一張默認(rèn)的圖片,否則當(dāng)為空時(shí)也會(huì)向服務(wù)器發(fā)送一次請(qǐng)求。這樣便實(shí)現(xiàn)了懶加載。我想實(shí)現(xiàn)限制觸發(fā)頻率,來優(yōu)化性能。 本文標(biāo)題:實(shí)現(xiàn)圖片懶加載(lazyload)文章作者:Jake發(fā)布時(shí)間:2016-11-26, 18:46:34最后更新:2016-11-28, 17:12:59原始鏈接:http://i....
摘要:當(dāng)頁面圖片很多時(shí),頁面的加載速度緩慢,幾鐘內(nèi)頁面沒有加載完成,也許會(huì)失去很多的用戶。指向一張默認(rèn)的圖片,否則當(dāng)為空時(shí)也會(huì)向服務(wù)器發(fā)送一次請(qǐng)求。這樣便實(shí)現(xiàn)了懶加載。我想實(shí)現(xiàn)限制觸發(fā)頻率,來優(yōu)化性能。 本文標(biāo)題:實(shí)現(xiàn)圖片懶加載(lazyload)文章作者:Jake發(fā)布時(shí)間:2016-11-26, 18:46:34最后更新:2016-11-28, 17:12:59原始鏈接:http://i....
摘要:配置項(xiàng)配置項(xiàng)中的參數(shù)有以下三個(gè)所監(jiān)聽對(duì)象的具體祖先元素,默認(rèn)是計(jì)算交叉狀態(tài)時(shí),將附加到祖先元素上,從而有效的擴(kuò)大或者縮小祖先元素判定區(qū)域設(shè)置一系列的閾值,當(dāng)交叉狀態(tài)達(dá)到閾值時(shí),會(huì)觸發(fā)回調(diào)函數(shù)。 一、前言 ??通常情況下,HTML 中的圖片資源會(huì)自上而下依次加載,而部分圖片只有在用戶向下滾動(dòng)頁面的場(chǎng)景下才能被看見,否則這部分圖片的流量就白白浪費(fèi)了。 ??所以,對(duì)于那些含有大量圖片資源的網(wǎng)...
摘要:在項(xiàng)目中,如果出現(xiàn)大圖一時(shí)半會(huì)加載不出來的情況確實(shí)很丑。如果是那種沒有給定寬高靠圖片撐起來的等圖片加載出來再把內(nèi)容擠下去的用戶體驗(yàn)效果非常差。如果對(duì)您有幫助請(qǐng)動(dòng)動(dòng)鼠標(biāo)右下方給我來個(gè)贊,您的支持是我最大的動(dòng)力。在項(xiàng)目中,如果出現(xiàn)大圖一時(shí)半會(huì)加載不出來 的情況確實(shí)很丑。如果是那種沒有給定寬高 靠圖片撐起來的等圖片加載出來 再把內(nèi)容擠下去的用戶體驗(yàn)效果非常差。 在vue中 使用vue-lazylo...
閱讀 1010·2019-08-30 15:55
閱讀 3451·2019-08-30 13:10
閱讀 1277·2019-08-29 18:45
閱讀 2355·2019-08-29 16:25
閱讀 2115·2019-08-29 15:13
閱讀 2429·2019-08-29 11:29
閱讀 560·2019-08-26 17:34
閱讀 1496·2019-08-26 13:57