懒加载-预加载精简解读

304 阅读1分钟

1.在云相册页面存在多张图片,一次性加载会出现页面中图片短暂白屏的问题,为了解决这个问题,使用懒加载来处理;

核心思路:使用html5中的 data-image 属性将图片的链接先绑定在元素身上,当检测到当前页的可视区域即将滚动到该元素时,将data-image注入到background-image上,在屏幕的scroll和resize事件上将该函数绑定;

核心代码如下:

//按照需求加载
var fn = function(){
	 $("#imagesBoxId  .image_div_css").each(function(){  //遍历所有图片
	       var othis = $(this),//当前图片对象	
	       var  top = othis.offset().top - $(window).scrollTop(); 
                   //计算图片top-滚动条top
          if (top > $(window).height()) {   //如果两者之差小于屏幕高度
	               return;   //不管
	            } else {                
                        othis.css('background-image', othis.attr('data-image'));
                        //可见的时候把占位值替换 并删除占位属性
                       };	            
	           });
	      };
 fn();
$(window).scroll(fn).resize(fn);    //绑定事件

2.除了懒加载,还有预加载的思想,比如在做手机端的那种向下滑动的页面,当检测到滑动到第一屏的底端时,再去提前加载第二屏的内容,这里可以理解为是预加载;比如在hover某些图片的时候,如果没有提前加载好,会出现闪烁的问题;这些情况都需要使用预加载;

//存放图片路径的数组
    var imgSrcArr = [
        'imgsrc1',
        'imgsrc2',
        'imgsrc3',
        'imgsrc4'
    ];
    var imgWrap = [];
    function preloadImg(arr) {
        for(var i =0; i< arr.length ;i++) {
            imgWrap[i] = new Image();
            imgWrap[i].src = arr[i];
        }
    }
    preloadImg(imgSrcArr);

3.懒加载和预加载的区别?

  一个是内容后置,一个是内容前置;