懒加载

js 实现懒加载

原理:利用scrollTop+盒子的高度与图片的offsetTop进行比较,如果大于  说明就在视窗内,将图片盒子的地址更改路径即可

代码:

<!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="images/1.png" alt="" class="picture" src=""  >
        <img data-original="images/2.png" alt="" class="picture" src=""  >
        <img data-original="images/3.png" alt="" class="picture" src=""  >
        <img data-original="images/4.png" alt="" class="picture" src=""  >
        <img data-original="images/5.png" alt="" class="picture" src=""  >
        <img data-original="images/6.png" alt="" class="picture" src=""  >
        <img data-original="images/7.jpg" alt="" class="picture" src=""  >
        <img data-original="images/8.jpg" alt="" class="picture" src=""  >
        <img data-original="images/9.jpg" alt="" class="picture" src=""  >
        <img data-original="images/10.jpg" alt="" class="picture" src=""  >
        <img data-original="images/11.jpg" alt="" class="picture" src=""  >
        <img data-original="images/12.jpg" alt="" class="picture" src=""  >
        <img data-original="images/13.jpg" alt="" class="picture" src=""  >
        <img data-original="images/14.png" alt="" class="picture" src=""  >
        <img data-original="images/15.png" alt="" class="picture" src=""  >
        <img data-original="images/16.png" alt="" class="picture" src=""  >
        <img data-original="images/17.png" alt="" class="picture" src=""  >
        <img data-original="images/18.png" alt="" class="picture" src=""  >
        <img data-original="images/19.png" alt="" class="picture" src=""  >
        <img data-original="images/20.png" alt="" class="picture" src=""  >
        <img data-original="images/21.png" alt="" class="picture" src=""  >
        <img data-original="images/22.png" alt="" class="picture" src=""  >
        <img data-original="images/23.png" alt="" class="picture" src=""  >
        <img data-original="images/24.png" 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;
                    }
                    item.src = item.dataset.original;   
                }                            
            });  
            //以下方法是不能的  滚动的时候会全部一次性重新刷新图片
            /*for(var i = 0;i < images.length; i++){
                let item = images[i]
                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>
原文地址:https://www.cnblogs.com/pengfei25/p/11190457.html