百度瀑布流图片动态加载实现

参考链接:http://www.htmleaf.com/jQuery/pubuliuchajian/2014100330.html

最近在做图片管理系统的时候,由于开始的时候没考虑到用户的图片量,没有采取分页效果,当后来当图片量大的(测试的为5万张)时候,浏览器则会出现崩溃,导致解析响应很久,这对体验效果很是不好。

后来想到了分页,如果,用户想点击下一页,则需要点击触发一下,并且如果想返回上一页的话,还得重新请求,在浏览图片的时候,这种体验不是很好。

再后来又想到了通过页面点击【查看更多】,然后通过ajax动态加载新图片,虽然这个比分页稍许进步(如果查看上一页,则不会再次请求),但是还是需要用户点击才出发下一页,也不是很优秀。

最后就想到了瀑布流,延迟加载的方式。

刚开始搜了一大篇相关插件,特别是基于jquery的lazyload,但是还是不够优秀啊,这方法采用的是将所有图片加载到前端,只是不显示,然后在滚动条滚动到底部的时候才去请求图片文件,虽然效果差不多,但是还是将所有图片相关内容一次性的加载到了前端,5万张图片浏览器还是会崩溃的。

最后就想到了百度图片的瀑布流动态加载,问题最后得以最优解决。

下面是代码实现:

首先是相关的请求值的存放(设置在隐藏域中):

    <!-- 存放瀑布流加载相关参数 -->
    <div class="none hide-pull-div">
        <!-- 当前页 -->
        <input type="hidden" value="1" class="h-page"/>
        <!-- 下一页是否请求完毕,正在请求中则不再进行请求 0:请求完毕,1-正在请求中 -->
        <input type="hidden" value="0" class="h-finsh"/>
        <!-- 是否达到最大页,如果达到最大页,则均不再请求 -->
        <input type="hidden" value="0" class="h-maxPage"/>
    </div>

然后最核心的JS代码:

    $(function(){
        // 图片列表所在div滚动事件
        $("div.pic-show-box").scroll(function(){
            var $this =$(this),
            viewH =$(this).height(), // 可见高度
            contentH =$(this).get(0).scrollHeight, // 内容高度
            scrollTop =$(this).scrollTop(); // 滚动高度
            if(scrollTop/(contentH -viewH)>=0.95) { // 大于滚动条95%时,加载新内容
                var pull = $(".hide-pull-div");
                // 判断是否已请求为最大页数,如果达到最大页数则不再请求
                if ($(pull).find(".h-maxPage").val() == 1) {
                    return;
                }
                // 判断上一次请求是否完成,如果未完成,则不再请求
                if ($(pull).find(".h-finsh").val() == 1) {
                    return;
                }
                // 请求前将请求状态设置为1(请求中)
                $(pull).find(".h-finsh").val(1);
                // 构建请求,动态获取数据
                var data = {
                    page : Number($(pull).find(".h-page").val()) + 1,
                }
                $.post("/pic/getPullPictures",data,function(rs){
                    for (var i = 0; i < rs.pictures.length; i++) {
                        // 这里加载新图片数据..(略)
                    }
                    $(pull).find(".h-page").val(pagerInfo.page);
                    $(pull).find(".h-finsh").val(0);
                    // 如果到达最大页码的时候,设置该值为1
                    if (rs.page >= rs.pageMax) {
                        $(pull).find(".h-maxPage").val(1);
                    }
                });
            }
        });
    });

给一下实现后的视图效果:

原文地址:https://www.cnblogs.com/zhangyuanqiang/p/9157016.html

时间: 2024-11-05 21:55:25

百度瀑布流图片动态加载实现的相关文章

百度echarts地图扩展动态加载geoCoord

var data={}; for(var i=0;i<result.length;i++){ data[(""+result[i].name+"")]=eval("("+result[i].location+")"); } geoCoord:{'Islands':[113.95, 22.26]} geoCoord是一个obj,Islands类型也是obj,[113.95, 22.26]是数组,要将json种取出的数组转换

10几款网站瀑布流布局图片无限加载动效

jQuery选项卡形式图片瀑布流布局选项卡切换效果代码 jquery masonry瀑布流插件制作图片瀑布流布局代码 原生js简单瀑布流图片无限加载带鼠标悬停图片遮罩效果 jquery masonry瀑布流插件制作图片瀑布流布局代码 jquery柔韧性的图片滑动瀑布流布局 jquery时间轴插件文字图片瀑布流布局时间轴特效(不兼容IE678) modernizr html5图片预加载瀑布流布局鼠标悬停动画效果代码 jquery.waterfall.js自动底部填充对齐的瀑布流布局代码 jquer

[JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件

页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空间,到底部时,会动态加载剩余的说说或者是日志 今天我们就来看看他们的实现思路和js控制动态加载的代码 下面的代码主要是控制滚动条下拉时的加载事件的 在下面代码说明出,写上你的操作即可,无论是加载图片还是加载记录数据  都可以 别忘了引用jquery类库 [JavaScript] 纯文本查看 复制代码

js的动态加载、缓存、更新以及复用(一)

使用范围: OA.MIS.ERP等信息管理类的项目,暂时不考虑网站. 遇到的问题: 完成一个项目,往往需要引用很多js文件,比如jQuery.js.easyUI等.还有自己写的一些列js文件,那么这些文件如何方便的加载,如果文件有变化如何才能让客户端及时更新缓存?如果能够提高点运行效率,那就更好了. 目标: 1.  可以方便的引用js文件. 2.  尽量使用各种缓存,避免频繁从服务器读取文件. 3.  如果js文件有更新或者增加.减少几个减少js文件,需要客户端能够自动.立刻更新. 4.  Js

Android动态加载技术三个关键问题详解

编者按:InfoQ开设新栏目“品味书香”,精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注.本文节选自任玉刚著<Android开发艺术探索>中的章节“Android的动态加载技术”,探讨了Android动态加载的三个关键问题. 动态加载技术(也叫插件化技术)在技术驱动型的公司中扮演着相当重要的角色,当项目越来越庞大的时候,需要通过插件化来减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块.动态加载是一项很复杂的技术,这里主要介绍动态加载技术中

android DexClassLoader动态加载技术详解

介绍 做项目到一定庞大的时候就会发现方法数太多,安装包根本就装不上去了,这个也不足为奇,我们都知道当方法数目超过65536这个数目限制的时候,挡在2.x的系统上面就会出现无法安装的情况,这个时候动态加载技术就显得非的重要了,我们的项目中为了兼容2.x的手机也是用到了android的动态加载技术,这里我会详细的讲解一下怎么去用,怎么实战,我感觉,空谈理论不如动手来得实在. 实例 下面就通过一个例子反复的说明怎么来实现动态加载,通过不同的方法来调用. 准备工作 1:新建一个java工程(我比较懒我就

js的动态加载、缓存、更新以及复用

使用范围: OA.MIS.ERP等信息管理类的项目,暂时不考虑网站. 遇到的问题: 完成一个项目,往往需要引用很多js文件,比如jQuery.js.easyUI等.还有自己写的一些列js文件,那么这些文件如何方便的加载,如果文件有变化如何才能让客户端及时更新缓存?如果能够提高点运行效率,那就更好了. 目标: 1.  可以方便的引用js文件. 2.  尽量使用各种缓存,避免频繁从服务器读取文件. 3.  如果js文件有更新或者增加.减少几个减少js文件,需要客户端能够自动.立刻更新. 4.  Js

如何用easyui动态加载表格标题

在最近做的项目中涉及到了需要加载大量表格的功能,采用了easyui的datagrid,但是发现datdagrid表格标题需要手动写,这在表格多的情况是一件很麻烦的事情.经过了long long time 终于研究出来了动态加载表格标题的方法. 首先给下效果图. 刚开始本人用easyui最原始的方式将表格放入我需要它放置的位置.整体页面因为某些原因呢就不展示给大家看了. 首先大家可以去网上下载easyui的包以及easyui的中文文档.easyui包友情链接:http://www.jeasyui.

兼容的动态加载JS【原】

兼容的动态加载JS 屌丝就是悲剧,五一还得宅家里写程序专研技术. 说起动态加载JS,搞web的肯定不陌生,著名的YUI库就有强大的模块化的动态加载JS机制.在代码量不断庞大的今天,动态加载JS作用还是非常明显的.事实上这门技术已经非常古老了,可是发现网络上非常多资料也相同非常古老.诶,没法,自立更生吧,人生总要不断积累的,更何况作为一个程序员呢. 关于动态JS大家比較关注的无非就两点,兼容性怎样?怎样控制是同步还是异步?如今针对常见的4种方案来分析.前3种是异步的,最后1种是同步的. 方法1: