摘要:懶加載的意義這里懶的意思可以理解為延遲,如淘寶京東這些電商平臺(tái)有大量的圖片,如果上來(lái)就加載服務(wù)器表示壓力山大,所以就想出了懶加載這種克敵之法,用戶(hù)滾動(dòng)到的區(qū)域才發(fā)送請(qǐng)求加載內(nèi)容原理將頁(yè)面中的標(biāo)簽指向一張小照片或者為空都可以,然后寫(xiě)一個(gè)自定義
懶加載的意義
這里‘懶’的意思可以理解為延遲,如淘寶、京東這些電商平臺(tái)有大量的圖片,如果上來(lái)就加載服務(wù)器表示壓力山大,所以就想出了懶加載這種克敵之法,用戶(hù)滾動(dòng)到的區(qū)域才發(fā)送請(qǐng)求加載內(nèi)容
原理將頁(yè)面中的img標(biāo)簽src指向一張小照片或者為空都可以,然后寫(xiě)一個(gè)自定義屬性比如(data-src)指向正確的圖片,其實(shí)就是用正確的照片替換src里面的照片
代碼在寫(xiě)代碼前,需要了解各種高度。先看這篇文章js坐標(biāo)位置
javascriptDocument
var num = document.getElementsByTagName("img").length; var img = document.getElementsByTagName("img"); var n = 0; //存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開(kāi)始遍歷 lazyload(); //頁(yè)面載入完畢加載可是區(qū)域內(nèi)的圖片 window.onscroll = lazyload; function lazyload() { //監(jiān)聽(tīng)頁(yè)面滾動(dòng)事件 var seeHeight = document.documentElement.clientHeight; //可見(jiàn)區(qū)域高度 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動(dòng)條距離頂部高度 for (var i = n; i < num; i++) { if (img[i].offsetTop < seeHeight + scrollTop) { if (img[i].getAttribute("src") == "") { img[i].src = img[i].getAttribute("data-src"); } n = i + 1; } } }使用節(jié)流函數(shù)進(jìn)行性能優(yōu)化
如果直接將函數(shù)綁定在scroll事件上,當(dāng)頁(yè)面滾動(dòng)時(shí),函數(shù)會(huì)被高頻觸發(fā),這非常影響瀏覽器的性能。
我想實(shí)現(xiàn)限制觸發(fā)頻率,來(lái)優(yōu)化性能。
節(jié)流函數(shù):只允許一個(gè)函數(shù)在N秒內(nèi)執(zhí)行一次。下面是一個(gè)通俗易通的節(jié)流函數(shù):
var num = document.getElementsByTagName("img").length; var img = document.getElementsByTagName("img"); var n = 0; //存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開(kāi)始遍歷 resizehandler(); //頁(yè)面載入完畢加載可是區(qū)域內(nèi)的圖片 n=0; function resizehandler(){ var seeHeight = document.documentElement.clientHeight; //可見(jiàn)區(qū)域高度 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動(dòng)條距離頂部高度 for (var i = n; i < num; i++) { if (img[i].offsetTop < seeHeight + scrollTop) { if (img[i].getAttribute("src") == "") { img[i].src = img[i].getAttribute("data-src"); } n = i + 1; } } } function throttle(method,context){ clearTimeout(method.tId); method.tId=setTimeout(function(){ method.call(context); },500); } window.onscroll=function(){ throttle(resizehandler,window); }函數(shù)節(jié)流方案以下三種 時(shí)間戳方案
var num = document.getElementsByTagName("img").length; var img = document.getElementsByTagName("img"); var n = 0; //存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開(kāi)始遍歷 lazyload(); //頁(yè)面載入完畢加載可是區(qū)域內(nèi)的圖片 function lazyload() { //監(jiān)聽(tīng)頁(yè)面滾動(dòng)事件 var seeHeight = document.documentElement.clientHeight; //可見(jiàn)區(qū)域高度 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動(dòng)條距離頂部高度 for (var i = n; i < num; i++) { if (img[i].offsetTop < seeHeight + scrollTop) { if (img[i].getAttribute("src") == "") { img[i].src = img[i].getAttribute("data-src"); } n = i + 1; } } } --------------------------------- 以上代碼不在重復(fù) -------------------------------- var throttle = function(fun,delay){ var perv = Date.now(); return function(){ var context = this; var now = Date.now(); if (now-perv >= delay){ fun.apply(context,arguments) prev = Date.now(); } } } window.addEventListener("scroll",throttle(lazyload,1000))定時(shí)器方案
var throttle = function(fun,delay){ var timer = null; return function(){ var context = this; if(!timer){ timer = setTimeout(function(){ fun.apply(context,arguments) timer = null },delay) } } } window.addEventListener("scroll",throttle(lazyload,1000))時(shí)間戳+定時(shí)器方案
var throttle = function(fun,delay){ var timer = null; var startTime = Date.now(); return function() { var curTime = Date.now(); var remaining = delay - (curTime - startTime); var context = this; var args = arguments; clearTimeout(timer); if (remaining <= 0) { fun.apply(context, args); startTime = Date.now(); } else { timer = setTimeout(fun, remaining); } } } window.addEventListener("scroll",throttle(lazyload,1000))
參考資料
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/101703.html
摘要:是基于的輕量級(jí)高性能可配置的純并且無(wú)依賴(lài)的懶加載器,其能夠被用于進(jìn)行圖片等多種形式的元素。在上,至今短短的一個(gè)月的時(shí)間,已經(jīng)收獲了的。傳送門(mén)阮一峰老師使用教程懶加載懶加載其實(shí)就是延遲加載。 showImg(https://github.com/ApoorvSaxena/lozad.js/raw/master/banner/lozad-banner.jpg); Lozad.js 是基于 ...
摘要:手把手教你做個(gè)人火的時(shí)候,隨便一個(gè)都能賺的盆滿(mǎn)缽滿(mǎn),但是,個(gè)人沒(méi)有服務(wù)端,沒(méi)有美工,似乎就不能開(kāi)發(fā)了,真的是這樣的嗎秘密花園經(jīng)典的中文手冊(cè)。涵蓋前端知識(shí)體系知識(shí)結(jié)構(gòu)圖書(shū)推薦以及入門(mén)視頻教程,全的簡(jiǎn)直不要不要的了。 JavaScript 實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制指定區(qū)域文本 html5 的 webAPI 接口可以很輕松的使用短短的幾行代碼就實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制區(qū)域文本的功能,不需要依賴(lài) flash。...
摘要:縮短的長(zhǎng)度能夠有效降低首屏?xí)r間。即便你使用打包工具只引用了一個(gè)外部腳本文件,但是如果這個(gè)腳本文件的傳輸延遲和執(zhí)行延遲,會(huì)導(dǎo)致后面的非關(guān)鍵資源的請(qǐng)求被延遲,雖然這不會(huì)減慢的首屏?xí)r間。 以通俗的方式理解關(guān)鍵渲染路徑 我在看了 google 的 Critical Rendering Path (中文)后, 想把 CRP(Critical Rendering Path) 用通俗易懂的方式描述出...
閱讀 468·2021-10-09 09:57
閱讀 473·2019-08-29 18:39
閱讀 814·2019-08-29 12:27
閱讀 3030·2019-08-26 11:38
閱讀 2671·2019-08-26 11:37
閱讀 1296·2019-08-26 10:59
閱讀 1383·2019-08-26 10:58
閱讀 993·2019-08-26 10:48