懒加载和瀑布流

懒加载机制和瀑布流结合

预览链接
预览链接

懒加载原理

懒加载的目的是为了加快对资源的请求,减少请求的时间,减少用户等待的时间,从而提高用户体验。
因此,除了提高网速,懒加载是减少不必要的请求,如未进入窗口视线的元素(图片,css等),不必进行加载,先用同一张图片进行代替,还有已经进行过加载的元素,不必再次加载。

// 懒加载核心代码
function lazyload() {
  $("img").not("[loaded]").each(function() {
    if(isShow($this)) {
      loadImg($(this));
    }
  })
}

瀑布流原理

瀑布流是将所有元素等宽,上下排列,每加载一个元素,将它插入多列等宽流中高度最低的一个。因此有两个关键点:1. 元素等宽。 2. 找到每次高度最低的一列。

function waterFall ($item) {
  var minIndex = 0;  // 最小高度数值
  var minHeight = 0;  // 最小高度
  var heightArr = [];  // 存储每列的高度
  var colCount;  // 瀑布流列数
  for(var i=0;i<heightArr.length;i++) {
    if(minHeight > heightArr[i]) {
      mingHeight = heightArr[i];
      minIndex = i;
    }
  }
  $item.css({
    top: minHeight,
    left: minIndex * itemWidth
  });  // 利用绝对定位,高度和宽度放置元素。
  heightArr[minIndex]  += $item.outerHeight(true); // 刚放置元素的高度等于之前的高度加刚加上的元素的高度
}

实现原理

  1. 在初始化时,放松一次请求,先进行一次加载。
  2. 利用瀑布流的形式,放置已加载的新闻图片流。
  3. 当用户滚动到已加载元素底部时,重复 第1步、第2步。

核心代码:

function init() {
  start();

  $(window).on('scroll', function() {
    if(isBottom()) {
      start();
    } 
  });
}
init();

细节实现代码:

function start() {
  getData(function(data) {
    var $node = generateData(data);
    waterfall($node);
  });
}

function getData(callback) {
  $.ajax();
  callback(data);
}

function generateData(data) {
  // do something to data
  return $node
}

function waterfall($node) {
  // calculate the minHeight and minIndex;
  $node.css({
    top: minHeight,
    left: minIndex * itemWidth
  });
}

function bind() {
  $(window).on('scroll', function() {
    if(isBottom()) {
      start();
    }
  });
}

function isBottom() {
  return element.offset().top < $(window).scrollTop() + $(window).height();
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 人生就像一列开往坟墓的列车,路途上会有很多站,很难有人至始至终陪你走完全程,当陪你的人要下车时,即便不舍,也要心存...
    sunny519111阅读 4,542评论 0 0
  • 简述图片懒加载的实现原理 原理:先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再i...
    jrg陈咪咪sunny阅读 5,422评论 0 1
  • 瀑布流-新浪新闻 瀑布流项目结合懒加载预览地址 懒加载原理 为了防止页面一次性向服务器发送大量请求,导致服务器响应...
    诺CIUM阅读 5,048评论 0 1
  • 简述图片懒加载的实现原理 原理:先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再i...
    饥人谷_阿银阅读 3,038评论 0 0
  • 2019年3月28日 星期四 天气晴 欢迎来到老道说道。 没有什么比这个更有力量的了,浮躁是多数人存在的问题,每每...
    老道说道阅读 3,161评论 0 5

友情链接更多精彩内容