首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jquery实现瀑布流加载图片的代码

瀑布流加载图片是一种流行的网页布局方式,它能够使图片按照一定的规律排列,通常是从上到下,从左到右,形成类似瀑布的效果。使用jQuery实现瀑布流加载图片,可以通过监听滚动事件来判断是否需要加载更多图片,并动态地将新图片添加到页面中。

以下是一个简单的jQuery实现瀑布流加载图片的示例代码:

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>瀑布流加载图片</title>
<style>
  .container {
    position: relative;
    width: 100%;
  }
  .item {
    position: absolute;
    width: 200px;
    margin: 5px;
    box-sizing: border-box;
  }
  .item img {
    width: 100%;
    display: block;
  }
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<div class="container">
  <!-- 图片将在这里动态加载 -->
</div>

<script>
$(document).ready(function() {
  var isLoading = false; // 是否正在加载数据的标志
  var loadCount = 0; // 已加载的图片数量
  var container = $('.container');
  var itemWidth = 200; // 每个图片容器的宽度
  var columns = Math.floor(container.width() / itemWidth); // 计算列数

  function layoutImages() {
    var items = $('.item');
    var heights = []; // 存储每列的高度
    items.each(function(index) {
      var column = index % columns;
      $(this).css('left', column * itemWidth);
      if (heights[column] === undefined) {
        heights[column] = 0;
      }
      $(this).css('top', heights[column]);
      heights[column] += $(this).outerHeight() + 5; // 加上间距
    });
    container.height(Math.max.apply(null, heights)); // 设置容器高度
  }

  function loadImages() {
    if (isLoading) return;
    isLoading = true;
    // 模拟异步加载图片数据
    setTimeout(function() {
      for (var i = 0; i < 10; i++) {
        var item = $('<div class="item"><img src="https://via.placeholder.com/200x' + (Math.floor(Math.random() * 200 + 100)) + '" alt="图片"></div>');
        container.append(item);
      }
      loadCount += 10;
      layoutImages();
      isLoading = false;
    }, 1000);
  }

  function checkLoadMore() {
    if (container.height() - $(window).scrollTop() - $(window).height() < 200) {
      loadImages();
    }
  }

  $(window).scroll(checkLoadMore);
  loadImages(); // 初始加载图片
});
</script>
</body>
</html>

在这个示例中,我们首先定义了一个容器 .container 来放置图片,每个图片都被包裹在一个 .item 的div中。我们使用CSS设置了 .item 的绝对定位,这样可以通过JavaScript动态地设置它们的位置。

JavaScript部分首先计算了容器可以容纳的列数,然后定义了 layoutImages 函数来根据每列的高度重新布局图片。loadImages 函数模拟了异步加载图片的过程,并在加载完成后调用 layoutImages 来更新布局。

最后,我们监听了窗口的滚动事件,当用户滚动到接近容器底部时,触发 loadImages 函数加载更多图片。

这个示例是一个基础的瀑布流实现,实际应用中可能需要根据具体需求进行调整和优化。例如,可以添加错误处理、图片懒加载、更复杂的布局算法等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 干货 | 如何实现jQuery响应式瀑布流 ?

    开门见山,本文介绍响应式的瀑布流的实现方法。 最终效果图如下,改变浏览器大小效果更棒哦~ ?...以下我们将每个瀑布流盒子简称为box 使用数组记录每个box宽和高 ---- 设置不同屏幕宽度下每一行box的数量 使用$(window).width()获取屏幕宽度 根据不同屏幕宽度设置每一行box的数量...使用数组boxArr保存每一竖列的高度,即每一竖列最后一个box的底部位置 使用瀑布流原理计算每个box的位置(left和top),并保存到数组boxStyleArr 123456789101112131415161718192021222324...---- 考虑图片加载 图片加载过程可能影响对box高度判断 可通过img.load来确保图片加载完成或者失败之后才进行计算 代码优化&封装 尽情发挥你的创造力吧 结束语 ---- 这个效果是我从别人的博客看到的...,然后自己用jQuery实现,这也不失为创造的乐趣呢。

    1.8K20

    vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多

    一、思路分析和效果图   用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果。...然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果; 选择哪种方式实现瀑布流,这里选择绝对定位方式; 关键问题:由于每张图片的宽高不一样,而瀑布流中要求所有图片的宽度一致,高度随宽度等比缩放...而且由于图片的加载是异步延迟。在不知道图片高度的情况下,每个图片所在的item盒子不好绝对定位。因此在渲染页面前先获取所有图片的高度,是解决问题的关键点!...这里选择用JS中的Image类,通过预加载图片的方式提前获取图片宽高,另外通过一个临时变量来计算是否所有图片的高度已经得到。当所有的图片高度获取后,开始渲染页面。...不过在第一次加载的时候,还是会有一点闪烁的感觉。 然后就是下拉刷新和上拉加载更多的效果,这里用了有赞的vant组件PullRefresh和List这套组合组件来实现。 先看个效果动图: ?

    3.4K10

    【iOS】瀑布流的实现

    Simulator Screen Shot - iPhone 8 - 2020-01-16 at 17.32.16.png 2、实现思路 根据瀑布流的列数,创建记录maxY的字典,例如两列的瀑布流,就创建两个...Key去记录左右两列当前最大的maxY // 初始化字典,有几列就有几个键值对,key为列,value为列的最大y值, // 初始值为上内边距 for (int i = 0; i < self.column...itemY = [self.maxYDic[minIndex] floatValue] + self.rowSpacing; } }else{ // 瀑布流多列情况...self.rowSpacing; } } attributes.frame = CGRectMake(itemX, itemY , itemWidth, itemHeight); 以上就是核心代码和思路...,具体代码请下载源码 3、需要重写的方法 继承UICollectionViewLayout重写以下方法 /// 1、初始化数据源 - (void)prepareLayout /// 2、计算每个Attribute

    2K10

    小程序实现瀑布流及懒加载无限刷新

    这两天在仿图虫,其中涉及到一个需求就是很多页面需要进行瀑布流加载,网上搜了很多教程,其中有一个思路挺好的,稍微有点复杂,但确实是我想要的效果。 ?...leftHight + tmp.itemHeight; } else { rightList.push(tmp); rightHight = rightHight + tmp.itemHeight; } 瀑布流展示图片的时候...,需要知道图片的宽高,然后根据图片的宽高比来设置 image组件的宽高。...所以如果你们的数据没有宽高或宽高比,很难实现瀑布流。虽然可以通过bindload获得图片宽高,但会对性能以及用户体验有很大影响,不推荐这么做。可以和后台商量下,看如何加上宽高数据。...onReachBottom(){ this.getbottom(); }, 还有上面调用了一个common.js函数,这是为了代码臃肿,封装的一个get请求,具体代码在这篇文章:使用promise对象进行

    6.1K22

    图片横向等高瀑布流,每行占满,限制行数 的实现

    图片的横向瀑布流,其实简单地按顺序排列就可以了 但要实现每行中各图片都等高(各行不一定等高,但每行里面等高),且每行都占满,就需要用到flex的特性了 控制每行图片高度都一致,可能会影响图片的比例,所以不能简单暴力地设置高度...,需要按比例来动态计算 另外,如要限制图片展示的行数,则只需判断好每行总高度与容器总高度的关系即可 这里就来实现一下这个小功能 点我预览 ?...因为都是假数据的关系,图片的宽高值是随机数,并非原图宽高值,仅作参考 看完上面那张大大的图,先想一下可以怎么实现.....核心代码是 // 图片预定义的高度 var baseHeight = 200; for (var i = 1; i <= num; ++i) { var w...还要一个问题,如何实现只显示三行 显示三行,每行的图片数量不固定,这是通过flex布局自动排列每一行的,都会经过 基本排列 -> 分配剩余空间 的步骤 目前想到的方法是对每一行的容器所占位置进行累加,最后对比即可

    2K60

    实现图片懒加载jquery.scrollLoading.js

    首先需要jquery.min.js插件,我用的是jQuery v2.1.3,大家可以去百度搜很多自己引入全局顶部即可,当然你的程序自带就不需要在引用JQ了。...第一步 找到你的全局顶部文件,上面已经说了如果你程序自带jq就忽略即可,大概就这样吧 第二步 找到你的底部文件,增加两段jspiex.gif为你要首次懒加载的图片,图片大家可以自己去找或者用我的 点击查看懒加载图片...实在不懂是哪个建议先进入到你的文章页按F12打开控制台看看加载了哪个js就扔进去 (function($) { $.fn.scrollLoading = function(options) {...loading(); //滚动执行 params.container.bind("scroll", loading); }; })(jQuery...); 结尾 然后这样就大功告成了,其实都很简单,我都是去扣的别人的。

    2.2K20

    两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!

    但可以一链代码解决 这个列表显示顺序是 左边 123右边456,不符合正常展示逻辑;然后可以使用js对数据进行预处理; 大致逻辑如下: const oldList = [1, 2, 3, 4, 5, 6...版本 70.0.3538.102(正式版本) (64 位) 以上代码没有问题,如果你用的老版浏览器可能存在兼容问题,就再多加几个重复的兼容浏览器的属性就行了,如下: -moz-column-count...moz-column-gap:40px; /* Firefox */ -webkit-column-gap:40px; /* Safari 和 Chrome */ column-gap:40px; 以此类推 html代码大致如下...这里可以自己实现宽高不一样的div,看效果 之前还用flex实现了一个,有坑,一边太长,一边太短,请先大致了解flex,写过demo再往下看,效果图如下: ?...实现方式如下: 一行里面两列,可以控制每列数量相等, 每列里面各自循环,下面伪代码 但是有个坑,如果左边都很高,右边比较矮,就会出现右边空很多的内容, 在找解决办法 下面的 指的是 css

    2K30

    延迟加载图片的jQuery插件-Lazy Load Plugin for JQuery

    Lazy Load是一个用Javascript写得jQuery插件。它可以使一个长网页中,不在当前视图中的图片延迟加载,以提高页面的载入速度。...使用方法 在页面头部加入插件 在使用图片的地方,使用下面的设置 src是替换图片,一般使用1*1像素的图片替代。后面data-original才是真正的图片。...然后在你的代码中加入,就可以了 $("img.lazy").lazyload(); 设置延迟加载参数 $("img.lazy").lazyload({ threshold : 200 }); 这样,图片就可以在距离显示区域...200像素的时候就开始预先加载。...使用特效 $("img.lazy").lazyload({ effect : "fadeIn" }); 默认延迟加载使用show方法来显示图片,可以用这个方法来改变图片的显示方法。

    3.7K10

    延迟加载图片的 jQuery 插件:Lazy Load

    网站的速度非常重要,现在有很多网站优化的工具,如 Google 的 Page Speed,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 Smush.it 这个工具对图片进行批量压缩,但是对于图片非常多的网站...,载入网页还是需要比较长的时间,这个时候我们可以使用 Lazy Load 这个 jQuery 插件来延迟加载图片。...Lazy loader 是一个延迟加载图片的 jQuery 插件,在一些图片非常多的网站中非常有用,在在浏览器可视区域外的图片不会被载入,直到用户将页面滚动到它们所在的位置才加载,这样对于含有很多图片的比较长的网页来说...,可以加载的更快,并且还能节省服务器带宽。...Lazy Loader 使用也非常简单,首先确保你的页面已经加载 jQuery Javascript 库,然后在加载 Lazy Load 的 Javascript 文件: jquery.js

    1.9K40

    Web前端实现瀑布流的几种方法

    瀑布流效果图如下: 前端实现瀑布流的方法很多,其中最简单的就是用CSS实现,其次是通过jQuery实现,最麻烦的就是js,那么就从最麻烦的开始吧$_$ 不管用哪种方法去实现瀑布流效果,html文件里的写法都是相同的...先把html里的内容粘贴如下: JS实现瀑布流效果 不管是什么语言,实现瀑布流效果的基本思路都是一样的,具体的我就不说了,只聊干货,上代码。...下面要考虑加载更多新图片了,在此就写成静态数据进行加载。首先先判断什么时候加载,我的判断是,当浏览器页面的偏移量加上浏览器的高度大于加载的最后一个盒子的头部偏移量的时候,加载新的数据。...jQuery实现瀑布流效果 首先要保证你有jQuery文件,然后导入jQuery文件,css文件跟js实现瀑布流效果是一样的,就不重新粘贴一遍了。...重点的还是我们自己写的js实现文件,道理跟js实现是一样的,所以我连函数名起得都一样,不多说,两个主要的函数直接粘贴如下: 实现瀑布流函数 判断是否加载的函数 加载数据 OK,jQuery实现瀑布流效果搞定了

    2.7K10
    领券