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

jquery瀑布流滚动加载图片

基础概念: 瀑布流布局是一种页面布局方式,它将页面元素按照不同列进行排列,使得每一列的高度尽可能相近,形似瀑布。当用户滚动页面时,会动态加载更多的图片或其他内容,这种技术被称为滚动加载或无限滚动。

优势

  1. 提供流畅的用户体验,用户无需翻页即可查看更多内容。
  2. 节省服务器资源,因为只在需要时才加载内容。
  3. 可以提高页面的参与度,因为用户更倾向于滚动查看更多内容。

类型

  • 基于列的瀑布流:内容按照固定数量的列进行排列。
  • 基于行的瀑布流:内容按照固定数量的行进行排列,较少见。

应用场景

  • 图片分享网站
  • 社交媒体动态展示
  • 新闻网站的文章列表
  • 电商网站的产品展示

遇到的问题及原因

  • 图片加载错位:由于图片尺寸未知,加载时可能导致布局错位。
  • 性能问题:大量图片同时加载可能导致页面卡顿。
  • 滚动加载不流畅:用户滚动时可能感觉到卡顿或加载延迟。

解决方案

  1. 图片加载错位
    • 使用占位符预设图片尺寸。
    • 图片加载完成后重新计算布局。
代码语言:txt
复制
$(window).on('load', function() {
    var $container = $('#masonry');
    $container.imagesLoaded(function() {
        $container.masonry('layout');
    });
});
  1. 性能问题
    • 使用懒加载技术,只加载可视区域内的图片。
    • 图片压缩和优化,减少文件大小。
代码语言:txt
复制
$('.lazy').lazyload({
    effect : "fadeIn"
});
  1. 滚动加载不流畅
    • 使用节流函数控制滚动事件的触发频率。
    • 异步加载数据,避免阻塞主线程。
代码语言:txt
复制
function throttle(func, limit) {
    let inThrottle;
    return function() {
        const args = arguments;
        const context = this;
        if (!inThrottle) {
            func.apply(context, args);
            inThrottle = true;
            setTimeout(() => inThrottle = false, limit);
        }
    };
}

$(window).scroll(throttle(function() {
    if ($(window).scrollTop() + $(window).height() >= $(document).height() - 100) {
        loadMoreContent();
    }
}, 200));

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

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>瀑布流滚动加载</title>
    <style>
        #masonry {
            column-count: 3;
            column-gap: 1em;
        }
        .item {
            break-inside: avoid;
            margin-bottom: 1em;
        }
        .item img {
            width: 100%;
            height: auto;
        }
    </style>
</head>
<body>
    <div id="masonry">
        <!-- 图片项将通过JavaScript动态添加 -->
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>
    <script>
        let page = 1;
        function loadMoreContent() {
            $.ajax({
                url: 'get_images.php', // 假设这是获取图片数据的API
                data: { page: page },
                success: function(data) {
                    data.forEach(function(imgSrc) {
                        $('#masonry').append(`<div class="item"><img class="lazy" data-original="${imgSrc}"></div>`);
                    });
                    page++;
                    $('.lazy').lazyload();
                }
            });
        }

        $(window).on('load', function() {
            loadMoreContent();
            $(window).scroll(throttle(function() {
                if ($(window).scrollTop() + $(window).height() >= $(document).height() - 100) {
                    loadMoreContent();
                }
            }, 200));
        });
    </script>
</body>
</html>

在这个示例中,我们使用了jQuery和懒加载插件来实现瀑布流滚动加载图片的功能。通过AJAX请求获取图片数据,并在页面滚动到底部时动态加载更多内容。

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

相关·内容

  • jquery scroll 滚动加载列表 获取腾讯云图片像素信息

    jquery scroll 滚动加载列表 获取腾讯云图片像素信息 场景描述 问题处理 其他问题处理 场景描述 bootstarp列表加载图片时需要同时获取图片的像素(宽and高),对于腾讯云这类远程存储获取图片来说...,虽然也可以通过java后台调用腾讯云接口获取图片像素,但是在列表加载大量图片并且没有分页的情况下,如果通过后台逐个获取图片像素信息返回给前台页面渲染的话,会导致前台页面迟迟加载不出来,且有浏览器内存耗尽卡死的风险...,并且腾讯云获取图片像素信息的接口还有频限100的限制,这就更导致了通过后台获取图片像素方案的不适用,那么如果通过页面jquery获取图片像素的时候当图片量很大的时候也是会出现卡顿,加载慢的情况,这个时候就考虑的热区内图片展示像素...,待滚动鼠标时再拉去当前页面热区内未加载图片像素信息的图片像素 其他问题处理 由于业务需要,除了列表页,我们同时增加了视图模式,效果如图 列表增加了滚动加载图片像素信息的方法,那么视图模式同样也需要,视图代码结构...('scroll'); } } 视图模式的加载效果 既然加了视图模式,那么就会涉及到视图和列表切换时方法的销毁问题,因为不销毁的话,在列表模式下,滚动的话也会执行视图模式的滚动方法导致资源浪费,关闭滚动方法的处理如下

    9010

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

    一、思路分析和效果图   用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果。...然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果; 选择哪种方式实现瀑布流,这里选择绝对定位方式; 关键问题:由于每张图片的宽高不一样,而瀑布流中要求所有图片的宽度一致,高度随宽度等比缩放...而且由于图片的加载是异步延迟。在不知道图片高度的情况下,每个图片所在的item盒子不好绝对定位。因此在渲染页面前先获取所有图片的高度,是解决问题的关键点!...}) }, 2.2、预加载图片,存储图片高度   获取数据后,遍历数据数组,预加载图片,计算图片缩放后的高度,存储起来。...同时由于图片加载是异步加载,所以用变量计数,当最后一个图片加载完成后,开始渲染页面。

    3.4K10

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

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

    1.8K20

    jQuery实现图片懒加载

    一、懒加载 1.什么是懒加载 目前,网络上各大论坛,尤其是一些图片类型的网站上,在图片加载时均采用了一种名为懒加载的方式,具体表现为,当页面被请求时,只加载可视区域的图片,其它部分的图片则不加载,只有这些图片出现在可视区域时才会动态加载这些图片...2.懒加载的原理 页面中的img元素,如果没有src属性,浏览器就不会发出请求去下载图片,只有通过javascript设置了图片路径,浏览器才会发送请求。...2.当滚动页面时,检查页面所有的img标签,看看这个标签是否出现到我们的视野,当出现在我们的视野时 再去判断它是否已经加载过,如果没有加载,加载它 */...function lazyRender() { $('.container img').each(function(){ //判断图片是否出现在可视窗口和图片是否已经加载...isLoaded($(this)) ){ //若图片出现在可是区域且没有加载,加载图片 loadImg($(this))

    13.7K20

    JQuery之图片懒加载

    由于现在很多的网站都带有大量的图片,而图片的加载又会特别的慢,特别是在移动端,懒加载就显的特别重要了,说白了就是按需加载,用户要看到哪里就显示哪里,下面来记录一下懒加载的基本实现步骤!...1.引入jquery.js与jquery.lazyload.js,由于jquery.lazyload.js依赖于jquery,所以必须要引入jquery 加载效果、没有加载时显示的默认图片等等,可以简单的封装一个方法,方便去调用. function lazy(className) {   $(className).lazyload({...//图片在距离屏幕 200 像素时提前加载.     ...threshold: 200,     //将图片加载放进click事件中(不常用)     event:"click",       //加载隐藏的图片(不常用)     skip_invisible

    4.6K10

    元素滚动高度和图片懒加载

    三、图片懒加载 我只想写一点笔记,方便自己记忆,这篇文章干货较少。...如果想学习懒加载的朋友,建议直接观看这篇文章实现图片懒加载(Lazyload),这篇文章写得很好, 懒加载主要是使用于图片比较多的情况,一次性加载所有的图片会给服务器比较大的压力,加载比较慢,所以我们先不加载未出现在页面可视区域内的图片...,等到滚动到可视区域后再去加载。...懒加载主要有3个步骤: 1、把所有图片的src值换成另外一张图片的src值,把真正的src值放在data-src内 2、判断元素是否从下方出现在可区域,$(node).offset().top滚动时offset的值,offset().top为元素距离页面内容的高度 ? 3、把图片data-src换成src值 <!

    1.6K20

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

    这两天在仿图虫,其中涉及到一个需求就是很多页面需要进行瀑布流加载,网上搜了很多教程,其中有一个思路挺好的,稍微有点复杂,但确实是我想要的效果。 ?...图片被压缩的不像样了,实例可以参考成品小程序:图虫下载 (点击下方图片即可进入) ?...leftHight + tmp.itemHeight; } else { rightList.push(tmp); rightHight = rightHight + tmp.itemHeight; } 瀑布流展示图片的时候...所以如果你们的数据没有宽高或宽高比,很难实现瀑布流。虽然可以通过bindload获得图片宽高,但会对性能以及用户体验有很大影响,不推荐这么做。可以和后台商量下,看如何加上宽高数据。...({ leftList: leftList, rightList: rightList, }); }) }, }) 其中getbottom为触底加载函数

    6.1K22
    领券