图片懒加载

192 阅读1分钟
    <script>
        var img = document.getElementsByTagName('img');
        //设置每次遍历的起始图片,防止重复加载
        var n = 0;
        //加载可视区域图片
        lazyLoad();
        function lazyLoad() {
            var seeHeight = document.documentElement.clientHeight;
            var scrollHeight = document.body.scrollHeight;
            for (var i = n; i < img.length; i++) {
                if (img[i].src === 'http://m.yytvip.com.cn/hjb/img/m01tzhaoyu.png') {
                    if (img[i].offsetHeight < seeHeight + scrollHeight) {
                        img[i].setAttribute('src', img[i].getAttribute('data-src'));
                        n++;
                    }
                }
            }
        }
        //节流
        function throttle(fn, wait, mustTime) {
            var timeout = null;
            var startTime = new Date();
            var curTime;
            return function () {
                var context = this;
                var args = arguments;
                curTime = new Date();
                if ((curTime - startTime) >= mustTime) {
                    startTime = curTime;
                    fn.apply(context, args);
                    clearTimeout(timeout);
                } else {
                    clearTimeout(timeout);
                    timeout = setTimeout(function () {
                        fn.apply(context, args);
                        startTime = new Date();
                    }, wait);
                }
            }
        }
        window.addEventListener('scroll', throttle(lazyLoad, 2000, 3000));
        
        
        写法多多
        
        <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>lazyLoad nick</title>
    <style>
        /*容器尺寸最好设置成图片尺寸,避免layout*/
        li{height:300px;}
    </style>
</head>
<body>
 <ul>
     <li>
         <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
         <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
         <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
         <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
        <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
        <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
         <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
         <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
     <li>
         <img src="http://img.alicdn.com/bao/uploaded/TB1bKIvJVXXXXaJXVXXSutbFXXX.jpg" data-src="http://img.alicdn.com/tps/i4/TB1h30lJFXXXXXzXXXX6o7KSVXX-730-300.jpg">
     </li>
 </ul>

 <script>
     window.onscroll = function() {//滚动加载
         lazyload();
     };
     window.onload = function() {//页面加载后首屏自动加载一次
         lazyload();
     };
     function lazyload(lazy) {
          lazy = lazy||50;//提前加载的距离
         var images = document.images,i = 0, len = images.length;
         for (; i < len; i++) {
             var obj = images[i];
//             obj.getBoundingClientRect().top< document.documentElement.clientHeight 判断元素滚动到可视区返回true
             if (obj.getBoundingClientRect().top - lazy < document.documentElement.clientHeight && !obj.isLoad) {
                 obj.isLoad = true;//判断首次加载
                 imageLoaded(obj, obj.dataset.src);
             }
         }
     }
     function imageLoaded(obj,src){//img加载完成在设置src,避免img从顶部加载到尾部出现的白板
         var img = new Image();
         img.onload = function() {
             obj.src = img.src;
         };
         img.src = src;
     }

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