基于javascript實(shí)現(xiàn)圖片懶加載
一、定義
圖片延遲加載也稱為懶加載,延遲加載圖片或符合某些條件時(shí)才加載某些圖片,通常用于圖片比較多的網(wǎng)頁(yè)??梢詼p少請(qǐng)求數(shù)或者延遲請(qǐng)求數(shù),優(yōu)化性能。
二、呈現(xiàn)形式
【1】延時(shí)加載,使用setTimeout或setInterval進(jìn)行加載延遲,如果用戶在加載前就離開,自然就不會(huì)進(jìn)行加載。
【2】條件加載,符合某些條件或者觸發(fā)了某些條件才開始異步加載。
【3】可視區(qū)域加載,僅僅加載用戶可以看到的區(qū)域,這個(gè)主要監(jiān)控滾動(dòng)條來(lái)實(shí)現(xiàn),一般距離用戶看到的底邊很近的時(shí)候開始加載,這樣能保證用戶下拉時(shí)圖片正好接上,不會(huì)有太長(zhǎng)時(shí)間的停頓。
三、基本步驟
【1】網(wǎng)頁(yè)中的圖片都設(shè)為同一張圖片
【2】給圖片增加data-original = "img/test.jpg"的屬性,保存圖片的真實(shí)地址
【3】當(dāng)觸發(fā)某些條件時(shí),自動(dòng)改變?cè)搮^(qū)域的圖片的src屬性為真實(shí)的地址
四、應(yīng)用
1、點(diǎn)擊按鈕顯示圖片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ margin: 0; } img{ height: 100px; width: 100px; } </style> </head> <body> <button>加載圖片</button> <img src="#" alt="測(cè)試" data-original = "img/test.png"> <script> var oBtn = document.getElementsByTagName('button')[0]; var oImg = document.images[0]; oBtn.onclick = function(){ oImg.src = "img/loading.gif"; if(oImg.dataset){ aftLoadImg(oImg,oImg.dataset.original); }else{ aftLoadImg(oImg,oImg.getAttribute("data-original")); } } function aftLoadImg(obj,url){ var oImg = new Image(); oImg.onload = function(){ obj.src = oImg.src; } oImg.src = url; } </script> </body> </html>
2、可視區(qū)顯示圖片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ margin: 0; } ul{ margin: 0; padding: 0; list-style: none; } img{ border: none; vertical-align: middle; } .in{ border: 1px solid black; margin: 10px; text-align: center; height: 400px; width: 400px; float: left; } .in img{ height: 400px; width: 400px; } </style> </head> <body> <ul class="list"> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img1.gif"></li> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img2.gif"></li> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img3.gif"></li> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img4.gif"></li> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img1.gif"></li> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img2.gif"></li> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img3.gif"></li> <li class="in"><img src="img/loading.gif" alt="測(cè)試" data-original = "img/img4.gif"></li> </ul> <script> var oBtn = document.getElementsByTagName('button')[0]; var aImages = document.images; loadImg(aImages); window.onscroll = function(){ loadImg(aImages); }; function loadImg(arr){ for( var i = 0,len = arr.length; i < len; i++){ if(arr[i].getBoundingClientRect().top < document.documentElement.clientHeight && !arr[i].isLoad){ arr[i].isLoad = true; arr[i].style.cssText = "transition: ''; opacity: 0;" if(arr[i].dataset){ aftLoadImg(arr[i],arr[i].dataset.original); }else{ aftLoadImg(arr[i],arr[i].getAttribute("data-original")); } (function(i){ setTimeout(function(){ arr[i].style.cssText = "transition: 1s; opacity: 1;" },16) })(i); } } } function aftLoadImg(obj,url){ var oImg = new Image(); oImg.onload = function(){ obj.src = oImg.src; } oImg.src = url; } </script> </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,順利實(shí)現(xiàn)javascript圖片懶加載。
- 基于jquery的圖片懶加載js
- 快速實(shí)現(xiàn)JS圖片懶加載(可視區(qū)域加載)示例代碼
- JavaScript實(shí)現(xiàn)圖片懶加載(Lazyload)
- 深入研究jQuery圖片懶加載 lazyload.js使用方法
- js前端實(shí)現(xiàn)圖片懶加載(lazyload)的兩種方式
- JS實(shí)現(xiàn)頁(yè)面數(shù)據(jù)懶加載
- JS實(shí)現(xiàn)圖片預(yù)加載無(wú)需等待
- javascript 事件加載與預(yù)加載
- js 實(shí)現(xiàn)圖片預(yù)加載(js操作 Image對(duì)象屬性complete ,事件onload 異步加載圖片)
- javascript實(shí)現(xiàn)圖片預(yù)加載和懶加載
相關(guān)文章
WebGL學(xué)習(xí)教程之Three.js學(xué)習(xí)筆記(第一篇)
Three.js是一個(gè)js的開源框架,它把webgl的所有東西都封裝好了,我們不再需要去了解webgl那些比較麻煩的細(xì)節(jié),直接在此框架上進(jìn)行開發(fā),既方便,又快捷,而且很容易就能學(xué)習(xí),感興趣的朋友跟隨小編一起看看吧2019-04-04javascript下拉列表中顯示樹形菜單的實(shí)現(xiàn)方法
這篇文章主要介紹了javascript下拉列表中顯示樹形菜單的實(shí)現(xiàn)方法,需要的朋友可以參考下2015-11-11淺談layui 數(shù)據(jù)表格前后臺(tái)傳值的問(wèn)題
今天小編就為大家分享一篇淺談layui 數(shù)據(jù)表格前后臺(tái)傳值的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09微信小程序開發(fā)之a(chǎn)nimation循環(huán)動(dòng)畫實(shí)現(xiàn)的讓云朵飄效果
這篇文章主要介紹了微信小程序開發(fā)之a(chǎn)nimation循環(huán)動(dòng)畫實(shí)現(xiàn)的讓云朵飄效果,結(jié)合實(shí)例形式分析了animation結(jié)合js時(shí)間函數(shù)實(shí)現(xiàn)循環(huán)動(dòng)畫效果的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07layui點(diǎn)擊彈框頁(yè)面 表單請(qǐng)求的方法
今天小編就為大家分享一篇layui點(diǎn)擊彈框頁(yè)面 表單請(qǐng)求的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JS控制只能輸入數(shù)字并且最多允許小數(shù)點(diǎn)兩位
這篇文章主要介紹了JS控制只能輸入數(shù)字并且最多允許小數(shù)點(diǎn)兩位,本文給大家提到j(luò)s如何限制input輸入框只能輸入數(shù)字問(wèn)題,需要的朋友可以參考下2019-11-11javascript dom追加內(nèi)容實(shí)現(xiàn)示例
javascript dom追加內(nèi)容的使用還是比較廣泛的,在本文將為大家介紹下具體的使用方法,感興趣的朋友可以參考下2013-09-09javascript結(jié)合Canvas 實(shí)現(xiàn)簡(jiǎn)易的圓形時(shí)鐘
本文給大家分享的是javascript結(jié)合Canvas 實(shí)現(xiàn)簡(jiǎn)易的圓形時(shí)鐘,主要是對(duì)自己前段時(shí)間學(xué)習(xí)html5的canvas的一次小檢驗(yàn),這里推薦給小伙伴們,有需要的可以參考下。2015-03-03