js实现动态加载数据瀑布流

实现动态加载数据瀑布流需要以下步骤:

  1. 设计页面布局

首先需要先设计好页面布局,确定每个瀑布流格子的大小,间距,位置等。一般放置瀑布流的容器是使用固定宽度的div,设置其为相对定位,然后每一个瀑布流格子都设置为绝对定位,根据不同的位置进行定位。

  1. 获取数据源

动态加载数据需要从后端获取数据源,可以通过Ajax请求后端获取数据,后端返回的数据一般是JSON格式的数据,包含图片地址和描述等。

  1. 数据处理

接收到后端返回的数据后,需要进行数据处理。由于瀑布流的特性决定了每个格子的高度不相同,所以需要先确定前几个格子的高度,然后把接下来的图片依据高度低的放在前面。可通过jQuery或者原生JavaScript的dom操作获取每个图片的高度,然后遍历查找当前高度最低的一列,将图片插入到该列中。

  1. 触发加载

将数据处理完后,必须确定什么时候加载,即需要通过用户的滚动事件来触发加载。当用户滚动到组件的底部的时候,才开始重新请求后端数据,进行数据处理,再将新请求的数据插入到最小高度的列中。

示例:

HTML代码:

<div class="waterfall">
  <div class="waterfall-item"></div>
  <div class="waterfall-item"></div>
  <div class="waterfall-item"></div>
</div>

CSS代码:

.waterfall {
  width: 900px;
  margin: 0 auto;
  position: relative;
  padding: 20px 0;
}
.waterfall-item {
  width: 400px;
  margin: 0 20px 20px 0;
  float: left;
  position: absolute;
}

JavaScript代码:

$(window).on('scroll', function() {
  let maxHeight = 0;
  let minHeight = 0;
  let minIndex = 0;
  const $items = $('.waterfall-item');
  $.each($items, function(i, el) {
    const $el = $(el);
    const elHeight = $el.outerHeight();
    if (i === 0) {
      maxHeight = minHeight = elHeight;
    }
    if (elHeight > maxHeight) {
      maxHeight = elHeight;
    }
    if (elHeight < minHeight) {
      minHeight = elHeight;
      minIndex = i;
    }
  })
  const lastEl = $items.eq($items.length - 1);
  if (lastEl.length && lastEl.offset().top < $(window).scrollTop() + $(window).height()) {
    $.ajax({
      url: 'http://localhost:8000/getdata',
      type: 'GET',
      success: function(data) {
        $.each(data, function(i, el) {
          const $img = $('<img/>');
          $img.attr({
            src: el.imgUrl,
            alt: el.title
          })
          const $desc = $('<p/>');
          $desc.text(el.title);
          const $item = $('<div/>').addClass('waterfall-item').append($img).append($desc);
          if (i >= minIndex && i <= minIndex + 2) {
            $item.css('top', `${maxHeight}px`);
            maxHeight += $item.outerHeight() + 20;
          } else {
            $item.css('top', `${minHeight}px`);
            minHeight += $item.outerHeight() + 20;
          }
          $('.waterfall').append($item);
        })
      }
    })
  }
})

以上是使用jQuery的实现示例,还可以使用原生JavaScript实现,代码基本相同,只是操作dom的方式不同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现动态加载数据瀑布流 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 一文搞懂JAVA 修饰符

    一文搞懂JAVA 修饰符 在Java中,修饰符(Modifier)是用来限制或者开放类、接口、方法和变量的访问权限;限制或者限制方法的继承或其他行为。Java中的修饰符分为以下几种: 访问控制修饰符:public,private,protected和默认(即不写)四种修饰符。 继承控制修饰符:final 和 abstract 两种修饰符。 静态修饰符:sta…

    other 2023年6月26日
    00
  • openbabel的安装与使用

    什么是OpenBabel? OpenBabel是一种化学信息学工具,用于处理化学结构数据。它可以读取、写入和转换多种化学文件格式,如SMILES、MOLPDB等。OpenBabel还提供了一些学计算功能,如分子对齐、药物性质预测等。 OpenBabel的安装 OpenBabel可以在Windows、Linux和Mac OS X等操作系统上安装。以下是在Ubu…

    other 2023年5月7日
    00
  • SpringBoot读写操作yml配置文件方法

    下面是SpringBoot读写操作yml配置文件方法的完整攻略。 1. yml配置文件基本语法 在SpringBoot中,我们通常使用yml配置文件来管理应用程序的配置信息。yml文件是以缩进的方式组织数据,具有可读性强、易于维护的特点。下面是一个简单的yml文件示例: server: port: 8080 spring: datasource: url: …

    other 2023年6月25日
    00
  • 使用delphi 10.2 开发linux 上的webservice

    使用Delphi 10.2在Linux上开发WebService 随着云计算和分布式系统的兴起,Web服务已经成为了重要的技术之一。在Delphi 10.2中开发Linux上的WebService可以为我们带来许多便利,本文将介绍使用Delphi 10.2开发Linux上的WebService的基本流程。 准备工作 在开始之前,我们需要确保我们已经正确安装了…

    其他 2023年3月28日
    00
  • 电脑提示错误:此卷不包含可识别的文件系统的解决办法

    电脑提示错误:此卷不包含可识别的文件系统的解决办法 背景 在使用电脑的过程中,我们有时会遇到“此卷不包含可识别的文件系统”的错误提示,此时我们无法访问该存储设备中的文件,这对我们的日常操作会造成很大的困扰,本文将介绍如何解决该问题。 原因 不可识别文件系统错误提示通常出现在存储设备(如U盘、硬盘等)因为文件系统损坏或其他原因不能被电脑识别时,会导致该设备无法…

    other 2023年6月27日
    00
  • Java字符串操作和C#字符串操作的不同小结

    Java字符串操作和C#字符串操作的不同小结 在Java和C#中,字符串是一种常见的数据类型,用于存储和操作文本数据。尽管两种语言都提供了类似的字符串操作功能,但它们之间存在一些细微的差异。下面是Java字符串操作和C#字符串操作的不同之处的详细攻略。 字符串的声明和初始化 在Java中,字符串可以使用String类进行声明和初始化。例如: String s…

    other 2023年8月18日
    00
  • Windows Phone 8.1完结:正式停止接收应用更新

    Windows Phone 8.1停止接收应用更新攻略 微软在2017年7月11日正式停止了Windows Phone 8.1的支持,包括停止对该系统的安全更新、修复漏洞等的更新,也包括停止接收应用程序的更新。 为什么要停止接收应用更新? Windows Phone 8.1是微软的旧操作系统,其用户量已经大幅下降,并且这个系统已经过时且不再受支持。大部分开发…

    other 2023年6月25日
    00
  • iphone6s死机如何重启?iphone6s死机问题的解决方法

    iPhone6s死机如何重启?iPhone6s死机问题的解决方法 如果您的iPhone6s死机(即卡死、无响应),不要慌张,可以尝试以下方法来重启它,或者解决死机问题。 重启iPhone6s的方法 硬重启。按住iPhone6s的电源键和Home键,直到出现苹果标志。这通常可以解决一些普通的死机问题。 使用iTunes重启。如果硬重启不起作用,可以尝试连接您的…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部