基于javascript實現(xiàn)圖片懶加載
一、定義
圖片延遲加載也稱為懶加載,延遲加載圖片或符合某些條件時才加載某些圖片,通常用于圖片比較多的網(wǎng)頁??梢詼p少請求數(shù)或者延遲請求數(shù),優(yōu)化性能。
二、呈現(xiàn)形式
【1】延時加載,使用setTimeout或setInterval進行加載延遲,如果用戶在加載前就離開,自然就不會進行加載。
【2】條件加載,符合某些條件或者觸發(fā)了某些條件才開始異步加載。
【3】可視區(qū)域加載,僅僅加載用戶可以看到的區(qū)域,這個主要監(jiān)控滾動條來實現(xiàn),一般距離用戶看到的底邊很近的時候開始加載,這樣能保證用戶下拉時圖片正好接上,不會有太長時間的停頓。
三、基本步驟
【1】網(wǎng)頁中的圖片都設(shè)為同一張圖片
【2】給圖片增加data-original = "img/test.jpg"的屬性,保存圖片的真實地址
【3】當(dāng)觸發(fā)某些條件時,自動改變該區(qū)域的圖片的src屬性為真實的地址
四、應(yīng)用
1、點擊按鈕顯示圖片
<!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="測試" 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="測試" data-original = "img/img1.gif"></li>
<li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/img2.gif"></li>
<li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/img3.gif"></li>
<li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/img4.gif"></li>
<li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/img1.gif"></li>
<li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/img2.gif"></li>
<li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/img3.gif"></li>
<li class="in"><img src="img/loading.gif" alt="測試" 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>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,順利實現(xiàn)javascript圖片懶加載。
- 基于jquery的圖片懶加載js
- 快速實現(xiàn)JS圖片懶加載(可視區(qū)域加載)示例代碼
- JavaScript實現(xiàn)圖片懶加載(Lazyload)
- 深入研究jQuery圖片懶加載 lazyload.js使用方法
- js前端實現(xiàn)圖片懶加載(lazyload)的兩種方式
- JS實現(xiàn)頁面數(shù)據(jù)懶加載
- JS實現(xiàn)圖片預(yù)加載無需等待
- javascript 事件加載與預(yù)加載
- js 實現(xiàn)圖片預(yù)加載(js操作 Image對象屬性complete ,事件onload 異步加載圖片)
- javascript實現(xiàn)圖片預(yù)加載和懶加載
相關(guān)文章
Bootstrap 附加導(dǎo)航(Affix)插件實例詳解
附加導(dǎo)航(Affix)插件允許某個 <div> 固定在頁面的某個位置。接下來通過本文給大家介紹Bootstrap 附加導(dǎo)航(Affix)插件實例詳解,感興趣的朋友一起看看吧2016-06-06
javascript 字符 Escape,encodeURI,encodeURIComponent
下面是對字符串編碼轉(zhuǎn)換功能函數(shù)大家,大家可以根據(jù)實際需要選擇使用。2009-07-07
layui實現(xiàn)數(shù)據(jù)表格點擊搜索功能
這篇文章主要為大家詳細(xì)介紹了layui實現(xiàn)數(shù)據(jù)表格點擊搜索功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
thinkjs微信中控之微信鑒權(quán)登陸的實現(xiàn)代碼
這篇文章主要介紹了thinkjs微信中控之微信鑒權(quán)登陸的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

