1. 程式人生 > >前端如何實現圖片懶載入(lazyload) 提高使用者體驗

前端如何實現圖片懶載入(lazyload) 提高使用者體驗

定義

圖片懶載入又稱圖片延時載入、惰性載入,即在使用者需要使用圖片的時候載入,這樣可以減少請求,節省頻寬,提高頁面載入速度,相對的,也能減少伺服器壓力。 
惰性載入是程式人性化的一種體現,提高使用者體驗,防止一次性載入大量資料,而是根據使用者需要進行資源的請求。

實現

懶載入的難點在於確定某張圖片是否是使用者需要的資源,在瀏覽器中,使用者需要的是可視區內的資源,因此我們只需要判斷圖片是否已經呈現在可視區內,當圖片呈現在可視區內時,獲取圖片的真實地址並賦給該圖片即可(圖片寬高需要指定,可以利用padding處理)

判斷是否存在於可視區

  1. 瀏覽器視口高度

  2. 待載入資源距離視口頂端位置

通過以上兩點即可判斷圖片是否位於可視區內。

var nodes = document.querySelectorAll('img[data-src]'),

   elem = nodes[0],

   rect = elem.getBoundingClientRect(),

   vpHeight = document.documentElement.clientHeight;

if(rect.top < vpHeight && rect.bottom>=0){

 console.log('show')

}

之後獲取圖片的真實地址

<img

src="loading.gif"alt=""data-src='1.gif'>

...

<script>

var src = elem.dataset.src;

</script>

把真實地址賦給圖片

var img =newImage();

img.onload =function(){

 elem.src = img.src;

}

img.src = src;

完整程式碼如下

var scrollElement = document.querySelector('.page'),

   viewH = document.documentElement

.clientHeight;

function lazyload(){

var nodes = document.querySelectorAll('img[data-src]');

Array.prototype.forEach.call(nodes,function(item,index){

var rect;

if(item.dataset.src==='')return;

   rect = item.getBoundingClientRect();

if(rect.bottom>=0&& rect.top < viewH){

(function(item){

var img =newImage();

         img.onload =function(){

           item.src = img.src;

}

         img.src = item.dataset.src

         item.dataset.src =''

})(item)

}

})

}

lazyload();

scrollElement.addEventListener('scroll',throttle(lazyload,500,1000));

function throttle(fun, delay, time){

var timeout,

       startTime =newDate();

returnfunction(){

var context =this,

           args = arguments,

           curTime =newDate();

       clearTimeout(timeout);

if(curTime - startTime >= time){

           fun.apply(context, args);

           startTime = curTime;

}else{

           timeout = setTimeout(fun, delay);

}

};

};


來自文章

相關推薦

前端如何實現圖片載入(lazyload) 提高使用者體驗

定義 圖片懶載入又稱圖片延時載入、惰性載入,即在使用者需要使用圖片的時候載入,這樣可以減少請求,節省頻寬,提高頁面載入速度,相對的,也能減少伺服器壓力。  惰性載入是程式人性化的一種體現,提高使用者體驗,防止一次性載入大量資料,而是根據使用者需要進行資源的請求。 實

如何結合外掛 vue-lazyload 來簡單實現圖片載入

外掛地址:https://www.npmjs.com/package/vue-lazyload; 一、使用場景: 在專案中有很多條數的資訊,且圖片很多的時候,不需要一次把整個頁面的圖片都載入完,而是在滾動到出現在螢幕才去載入該圖片的時候就可以用這個外掛。 二、簡單使用步驟: 1. 在專案裡面 npm

vue-lazyload實現圖片載入的方式

1、安裝vue-lazyload npm install --save vue-lazyload 2、在main.js中引入並申明使用 (1)引入 import VueLazyload from 'vue-lazyload' (2)申明使用 Vue.use(Vue

前端效能優化--圖片載入(lazyload image)

話說前頭: 上次寫了一篇webpack的學習心得,webpack能做到提升前端的效能,其模組打包最終生成一個或少量的檔案能夠減少對服務端的請求。除此之外,本次的圖片懶載入(當然不僅限於圖片,還可以有視訊,flash等)也是一種優化前端效能的方式。使用懶載入可以想要看圖片時

圖片載入 lazyload外掛

1,引用外掛 2,HTML圖片呼叫方法 //為圖片加入樣式lazy, 圖片路徑引用方法用: data-original 3, js 初始化 lazyload並設定圖片顯示方式 $(function() { $(‘img.lazy’).lazyload({

30行Javascript程式碼實現圖片載入

小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 前言 頁面太多圖片?那麼請你花20分鐘去優化一下頁面的效能 講道理,當你為圖片的src賦值時,D

Vue專案中實現圖片載入

---對於圖片過多的頁面,為了加速頁面載入速度,所以很多時候我們需要將頁面內未出現在可視區域內的圖片先不做載入, 等到滾動到可視區域後再去載入。這樣子對於頁面載入效能上會有很大的提升,也提高了使用者體驗

vue中 如何給圖片設定載入 用Vue實現圖片載入

懶載入:首先將圖片的src連結設為同一張圖,並將其真正的圖片地址儲存在img標籤的自定義屬性中。當js監聽到該圖片元素進入可視視窗時,即將自定義屬性中的地址儲存到src屬性中,達到懶載入的效果。 顧名思義,簡單理解就是 當頁面開啟,首先所有資料引進來的圖片先不顯示,所有圖先

JS實現圖片載入外掛

一、前言  我在前幾篇部落格的記錄中,有說自己在做一個圖片懶載入的功能,然後巴拉巴拉的遇到哪些問題,結果做完了也沒對懶載入這個功能做一些記錄,所以這篇文章主要針對我所實現的思路,以及程式碼做個記錄,實現不佳之處還望見諒和指出。 二、實現原理與相關問題 1.做成一個元件還是service?

基於javascript實現圖片載入(適用於pc端與h5)

這篇文章主要介紹了javascript實現圖片懶載入的方法及思路,在實際開發中有時我們需要用懶載入,也就是延遲載入圖片的方式,來提高網站的親和力,需要的朋友可以參考下。 一、定義   圖片延遲載入也稱為懶載入,延遲載入圖片或符合某些條件時才載入某些圖片,通常用於圖片比

jQuery實現圖片載入的兩種方法記錄

記錄一 整體思路: 設定個data-original(自定義一個屬性)來存放真實地址 當滾動頁面時,檢查所有的img標籤,看是否出現在視野中,如果已經出現在了視野中,那繼續再進行判斷,看其是否已經被載入過了,如果還沒有被載入過,那就進行載入。 程式碼: laz

微信小程式實現圖片載入辦法(思路參考)

微信小程式中,由於沒有辦法實現DEMO操作,位置的操作在小程式中很難進行,所以要實現圖片的懶載入是真的難啊(簡直操碎了心~~)!!! 懶載入的實現無非就那幾個辦法,說白了就是按需載入、監聽滾動條載入、延時載入。。。 說明:此方法只適用於有明確統一高度的圖片排

javascript實現圖片載入和預載入

所謂懶載入就是通過某些特定的條件,然後再給圖片的src賦值,常見的懶載入方式有點選載入和滾動載入。 如果是點選載入,那麼一般是通過點選事件。例如: 然後新增點選事件: 效果如下: 如

使用echo.js實現圖片載入

轉載自:http://demo.lanrenzhijia.com/2015/echo0625/ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti

echo.js改造 實現可視區域圖片載入lazyload效果

原來的echo.js有個缺點,快速滾動的時候不載入圖片,按住滾動條不放的時候圖片不載入,造成圖片空白不符合專案要求 改進程式碼如下: <script src="echo.min.js"></script> <script type="text

web 前端圖片載入實現原理

前端時間面試的時候老是被問到圖片懶載入實現及原理,由於自己在實際專案中並沒有用過,只是瞭解過大概,所以回答起來都不盡如人意,趁這段時間空閒下來有時間好好研究下,話不多說,直奔主題~ 一、html(這裡只列出相關的結構,body那些就不列了~) <ul>

jQuery.lazyload插件實現圖片加載與使用方法

gre 引用 提前 點擊圖片 測試 () comment fun res 1.引用jquery和jquery.lazyload.js到你的頁面 <script src="jquery-1.11.0.min.js"></script> <scri

vue 圖片載入 vue-lazyload

圖片懶載入 在實際的專案開發中,我們通常會遇見這樣的場景:一個頁面有很多圖片,而首屏出現的圖片大概就一兩張,那麼我們還要一次性把所有圖片都加載出來嗎?顯然這是愚蠢的,不僅影響頁面渲染速度,還浪費頻寬。這也就是們通常所說的首屏載入,技術上現實其中要用的技術就是圖片懶載入--到可視區域再載入。 vue中經常使

圖片載入 滾動載入圖片載入實現原理

滾動載入圖片(懶載入)實現原理   本文主要通過以下幾方面來說明懶載入技術的原理,個人前端小菜,有錯誤請多多指出 一、什麼是圖片滾動載入?   通俗的講就是:當訪問一個頁面的時候,先把img元素或是其他元素的背景圖片路徑替換成一張大小為1*1px圖片的路徑(這樣就

vue中使用圖片載入vue-lazyload外掛指南

使用方式 使用vue的 vue-lazyload 外掛 外掛地址: https://www.npmjs.com/package/vue-lazyload Installation 安裝方式 1. np