本文目錄
一、懶加載原理
1.1 原理
先將img標籤的src鏈接設爲同一張圖片,然後給img標籤設置自定義屬性(比如 data-original),然後將真正的圖片地址存儲在data-src中,當JS監聽到該圖片元素進入可視窗口時,將自定義屬性中的地址存儲到src屬性中,達到懶加載的效果。
1.2 目的
這樣做能夠避免頁面一次性向服務器發送大量請求,導致服務器響應變慢,最終導致頁面卡頓、崩潰等現象。
二、代碼實現
2.1 實現步驟
1. 將img標籤內的src屬性修改爲data-original, 給img標籤添加 class = "lazy" 屬性;
2. 把2.2的JS代碼複製到頁面上。
3. 如果想要實現圖片淡出的效果,需要加上如下css樣式
<style>
img.lazy{
visibility: visible;
opacity: 0.00;
filter: alpha(opacity=0);
-moz-opacity: 0.0;
}
</style>
2.2 JS代碼
具體實現的js代碼爲:
<script type="text/javascript">
$(function() {
imgLazyLoad();//初始化
$(document).scroll(imgLazyLoad); //當滾動條滾動時,掃描需要加載的div
//掃描需要加載的div
function imgLazyLoad() {
$.each($("body img.lazy"), function (i, o) {
//獲取窗口高度
var windowHeight = $(window).height(); // windowHeight = windowHeight/2; 設置滾動條在顯示屏幕高度2分之1的時候加載圖片
//獲取滾動條
var scrollTop = $(document).scrollTop();
//先判斷是否是加載完的圖片 跳出
if ($(o).attr("src") == $(o).attr("data-original")) {
return true;
} else if ($(o).offset().top <= (scrollTop + windowHeight) && $(o).offset().top >= scrollTop) {//判斷div是不是出在可見的位置
if ($(o).attr("data-original") != undefined || $(o).attr("data-original") != "undefined") {
var ObjectSrc = $(o).attr("data-original");
//把pic的值賦給src值
$(o).attr("src", ObjectSrc);
//css屬性改爲可見
$(o).css("visibility", "visible");
//漸變時間和漸變值
$(o).fadeTo(1000, 1.00);
}
}
});
}
});
</script>
下面爲整個HTML頁面,請查看:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<link href="" rel="SHORTCUT ICON">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/animate.min.css">
<link rel="stylesheet" href="css/product-details/smart_home.css">
<script src="js/jquery.min.js"></script>
<script src="js/response.js"></script>
<title>圖片懶加載實現方式</title>
<style>
img.lazy{
visibility: visible;
opacity: 0.00;
filter: alpha(opacity=0);
-moz-opacity: 0.0;
}
</style>
</head>
<body>
<section class="smart-home three">
<div class="section-content">
<div class="scene-box">
<div class="scene-box-item">
<div class="scene-box-item-bg"></div>
<div class="scene-box-item-content wow slideInUp">
<h4>安全升級</h4>
<p>設備主動防禦、數據分級存儲</p>
<p>搭載更安全的家</p>
<img class="lazy" data-original="images/product-details/smart_home/safe.png">
</div>
</div>
<div class="scene-box-item">
<div class="scene-box-item-bg"></div>
<div class="scene-box-item-content wow slideInUp">
<h4>舒適升級</h4>
<p>更舒適的空氣環境</p>
<p>更宜人的光環境</p>
<img class="lazy" data-original="images/product-details/smart_home/envir.png">
</div>
</div>
</div>
</div>
</section>
<script type="text/javascript">
$(function() {
imgLazyLoad();//初始化
$(document).scroll(imgLazyLoad); //當滾動條滾動時,掃描需要加載的div
//掃描需要加載的div
function imgLazyLoad() {
$.each($("body img.lazy"), function (i, o) {
//獲取窗口高度
var windowHeight = $(window).height(); // windowHeight = windowHeight/2; 設置滾動條在顯示屏幕高度2分之1的時候加載圖片
//獲取滾動條
var scrollTop = $(document).scrollTop();
//先判斷是否是加載完的圖片 跳出
if ($(o).attr("src") == $(o).attr("data-original")) {
return true;
} else if ($(o).offset().top <= (scrollTop + windowHeight) && $(o).offset().top >= scrollTop) {//判斷div是不是出在可見的位置
if ($(o).attr("data-original") != undefined || $(o).attr("data-original") != "undefined") {
var ObjectSrc = $(o).attr("data-original");
//把pic的值賦給src值
$(o).attr("src", ObjectSrc);
//css屬性改爲可見
$(o).css("visibility", "visible");
//漸變時間和漸變值
$(o).fadeTo(1000, 1.00);
}
}
});
}
});
</script>
</body>
</html>
完結!