如何用原生js寫一個(gè)懶加載頁面帶漸變效果

    懶加載經(jīng)常是我們性能優(yōu)化經(jīng)常使用的方案,那么我們今天就實(shí)現(xiàn)一波。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>懶加載</title>
    <style>
        img {
            display: block;
            margin: 0 auto 50px;
            width: 960px;
            height: 540px;
        }
        .opacity {
            animation: .5s ani linear;
            -webkit-animation: .5s ani linear;
            -moz-animation: .5s ani linear;
        }

        @keyframes ani {
            0% {
                opacity: 0;
            }

            50% {
                opacity: .5;
            }

            100% {
                opacity: 1;
            }
        }
    </style>
</head>

<body>
    <img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzutb8xegj31hc0u0k77.jpg" alt="">
    <img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzutz6y29j31hc0u0ak4.jpg" alt="">
    <img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuu8igyyj31hc0u0qgv.jpg" alt="">
    <img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuug47wrj31hc0u0k2q.jpg" alt="">
    <img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuuowb0hj31hc0u0akx.jpg" alt="">
    <img src="" data-src="http://ww1.sinaimg.cn/large/005ODVHQgy1fuzuuyjapsj31hc0u0ths.jpg" alt="">
</body>
<script>
    var len = document.getElementsByTagName('img').length;
    var img = document.getElementsByTagName("img");
    var n = 0; // 存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開始遍歷
    lazyload();// 頁面載入完畢加載可視區(qū)域內(nèi)的圖片

    // 監(jiān)聽頁面滾動(dòng)事件
    window.onscroll = function () {
        lazyload();
    };
    // 封裝懶加載函數(shù)
    function lazyload() {
        // 可見區(qū)域高度
        var seeHeight = document.documentElement.clientHeight;
        // 滾動(dòng)條距離頂部高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        for (var i = n; i < len; i++) {
            // 如果圖片距頂部距離小于可見區(qū)域高度與滾動(dòng)條距離頂部高度之和時(shí),才顯示圖片
            if (img[i].offsetTop < seeHeight + scrollTop) {
                if (img[i].getAttribute("src") == "") {
                    img[i].setAttribute('class', 'opacity');
                    img[i].src = img[i].getAttribute("data-src");
                }
                n = i + 1;
            }
        }
    }
</script>

</html>



作者:Vam的金豆之路

主要領(lǐng)域:前端開發(fā)

我的微信:maomin9761

微信公眾號(hào):前端歷劫之路