JavaScript圖片懶加載原理及實現(JavaScript實現圖片懶加載的方法分析)

本文目錄

一、懶加載原理

1.1 原理

1.2 目的

二、代碼實現

2.1 實現步驟

2.2 JS代碼


一、懶加載原理

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>

 

完結!

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