瀑布流思路总结

前言:瀑布流的效果,页面都是由很多数据块(这里将数据块分成多列)组成,每个数据块的高度不等,

        浏览器下拉后数据都是从高度最小列最先展示在用户面前;

实例http://miiee.taobao.com/choice.htm?pcid=8106&cid=8106001

 

1、首先获取每列的高度,保存在一个数组中,然后求数组中最小项的值

复制代码
// 获取数值数组中最小项的索引
// 数组只有一个元素,直接返回0
// 如果最小值有两个或以上,则返回第一个最小值的索引
function minIndexOf ( array ) {
    var arr = array || [], len = arr.length, index;
    if ( len > 0 ) {
        index = 0;
        if (len === 1) {
            return index;
        }
        for (var i = 1; i < len; i++) {
            if (arr[index] > arr[i]) {
               index = i;
            }
        }
        return index;
    }
} 
复制代码

 

2、(滚动条下拉)判断什么时候再次请求数据

复制代码
// 当浏览器 视口高度+scrollTop 大于等于 最小列的底部位置时,再次请求数据
function scrollEvent() {
    var scrollTop = $(window).scrollTop();
    var viewH = $(window).height(); // 在resize事件中更新
    var dynamicVal = scrollTop + viewH;

    var columns_postop = $(selector).offset().top;
    var referenceVal = columns_postop + min_h;

    if ( dynamicVal >= referenceVal ) {
        // 再次请求ajax
    }
}
复制代码

 

3、循环处理数据,每插入一个数据块,需要更新min_h,这样每次插入都是最先插入到高度最小列中

复制代码
function handleLoopData( start, end ) {
    // var itemList; 假设这是数据集合

    if ( var i = start; i < end; i++ ) {
        var itemObj = itemList[i];
        if ( itemObj !== undefined ) {
            // 结合HTML,将数据插入到高度最小列中,最小列根据min_h来判断
            // do something
            // 再次更新min_h的值
        }
    }
}
复制代码

优化:

1、ajax请求返回的数据可以分批插入到页面中,利用 handleLoopData函数的两个参数;

2、在处理图片时,可以先将url地址设置在img标签的一个属性中,CSS可以将图片父容器背景设置为一个加载的gif,当图片加载完毕后,再将该地址填入到img标签的src中。

复制代码
// 修改一下handleLoopData函数中代码
if ( itemObj !== undefined ) {
    // 结合HTML,将数据插入到高度最小列中,最小列根据min_h来判断
    // do something
    // 再次更新min_h的值
    
    // 假如将url地址设置为img标签的data-pic中
    var $targetPic; // 目标图片容器

    var imgUrl = $targetPic.attr('data-pic');
    (function($targetPic, imgUrl){
        var img = new Image();
        $(img).bind('load', function(){
            $targetPic.attr('src', imgUrl);
        });
        img.src = imgUrl;
    }($targetPic, imgUrl));
}
复制代码

 

该博文最后更新于:2013/11/25

如需转载请 注明出处: 博客园华子yjh原文链接

 

posted @   杨君华  阅读(1937)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示