懶加載提高頁面性能

一、什麼是懶加載?

  懶加載,就是延遲加載。針對於多圖片的頁面,只有當該圖片出現在頁面視區中時,再加載該圖片。。可以防止頁面一次性加載完所有的圖片,用戶等待時間較長,影響用戶體驗。

二、如何實現懶加載

 1. 將頁面中的圖片的src屬性設置爲空,並將src屬性真正的值存放在自定義屬性data-originnal(自定義屬性以data-開頭)。

 2.爲頁面中的圖片設置好大小,防止引起頁面的迴流,影響性能。

 3.判斷元素是否進入用戶視野中。(利用元素的offsetTop屬性與  scrollTop、clientTop之間的關係判斷)。若進入視野,則將      data-original屬性的值賦給圖片的src屬性

 4.  滾動,重複判斷元素是否進入視野。

三、具體實現:

1.設計HTML

<img data-original="mogu.jpg" alt="" class="picture" src=""  >

2.判斷元素是否進入視野

if(scrollTop+height>offsetTop){					
					
	var img = new Image();             //跨域異步請求圖片
        			
       	img.onload = function () {
       		console.log(1);
         	item.src = img.src;
       	}
      	img.src = item.dataset.original;    //獲取自定義對象的屬性
      				   				
}

四、完整代碼

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>lazyload</title>
	<style>
	#pictures{
		width: 900px;
		border: 1px solid #ccc;
		overflow: hidden;
	}
	.picture{
		float:left;
		width:250px;
		height:250px;
		margin: 10px 20px;
		border:1px solid #ccc;

	}
	</style>
	
</head>
<body>
	<div id="pictures">
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >
		<img data-original="mogu.jpg" alt="" class="picture" src=""  >

	</div>
	<script>
		var images=document.getElementsByTagName('img');
		function lazyload() {
		    Array.prototype.forEach.call(images,function(item,index) {
				
				var height=document.documentElement.clientHeight;				
				var scrollTop=document.documentElement.scrollTop;				
				var offsetTop=item.offsetTop;				

				if(scrollTop+height>offsetTop){					
					
					var img = new Image();        			
       				        img.onload = function () {       					    
         		 		   item.src = img.src;
       				        }
      				img.src = item.dataset.original;      				   				
			        }							
			});		
		}
		lazyload();                   //第一次加載頁面時需要自動加載

		document.addEventListener("scroll",lazyload); 

	</script>
</body>
</html>

五、代碼中的基礎問題以及解決方法

 1.判斷是否進入可視區

     

2.獲取自定義的屬性

   1.通過element.dataset.original.

      語法:

               

     基本上最新的瀏覽器都支持,對於低版本的瀏覽器兼容性不好。

  對於 element.dataset的詳細使用,參考鏈接點擊打開鏈接

  對於如何兼容低版本的瀏覽器,請參考   我的文章 ,實現兼容版本的element.dataset。

  2.通過 document.getAtrribute(“data-original”);

     兼容性好

六、代碼的其他問題

   判斷元素是否在可視區域時,會重複判斷元素,造成浪費。

七、使用echo.js庫實現預加載

  echo.js使用原生js編寫,不需要依賴其他庫。可獨立使用。(lazyload是jquery插件,使用時必須引入jquery,功能完善)

      1. 下載並引入echo.js。  

<script src="https://cdn.bootcss.com/echo.js/1.7.3/echo.js"></script>

      2.設置圖片的自定義屬性爲data-echo

      3. 使用:獲取元素並調用init()方法。接收一個對象。對象參數如下。

         offset:圖片在可視區域下方一段距離時,開始加載

         throttle:圖片延遲多少毫秒後加載。   

         unload:是否卸載在可視區域外面的圖片。默認爲false。           

echo.init({
	offset:0,
	throttle:0,
	unload:true,
	callback:funtion(element,op){

	}
});

 




  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章