zoukankan      html  css  js  c++  java
  • 简易瀑布流

    基于jquery的简易瀑布流

    代码如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>瀑布流</title>
    <style type="text/css">
    #divFlow {margin:20px; border:solid 1px gray; background-color:white; position:relative;}
    .divFlowItem {border:solid 1px gray; background-color:#eff; position:absolute; left:-2000px;}
    </style>
    <script src="js/jquery.js"></script>
    </head>
    <body style="background-color:#eee; overflow-y: scroll;">
    
    <div id="divFlow">
    
    </div>
    
    <script>
    
    // 超简单易懂瀑布流 by http://www.cnblogs.com/zjfree
    
    // 刷新瀑布流
    function resetFlow()
    {
        var allWidth = $('#divFlow').width();
        
        var arr = [];
        $('#divFlow>div').each(function(){
            arr.push({el:this, w:$(this).width(), h:$(this).height()});
        });
        
        var marginX = flowItemMargin;
        var colNum = parseInt((allWidth - marginX) / (marginX + flowItemWidth));
        colNum = Math.max(colNum, 1);
        
        marginX = parseInt((allWidth - colNum * flowItemWidth) / (colNum + 1));
        marginX = Math.max(marginX, flowItemMargin);
        
        var marginY = parseInt(marginX / 2);
        marginY = Math.max(marginY, flowItemMargin);
        
        var colHeight = [];
        for (var i=0; i<colNum; i++)
        {
            colHeight[i] = 0;
        }
        
        var j = 0;
        while(true)
        {
            var min = colHeight[0];
            var mini = 0;
            for (var i=1; i<colNum; i++)
            {
                if (colHeight[i] < min)
                {
                    mini = i;
                    min = colHeight[i];
                }
            }
            
            if (j == arr.length) break;
            
            arr[j].el.style.top = colHeight[mini] + marginY + 'px';
            arr[j].el.style.left = marginX + (flowItemWidth + marginX) * mini + 'px';
            colHeight[mini] += arr[j].h + marginY;
            j++;
        }
        
        var maxHeight = 0;
        for (var i=0; i<colNum; i++)
        {
            maxHeight = Math.max(colHeight[i], maxHeight);
        }
        
        maxHeight += marginY;
        
        $('#divFlow').css('height', maxHeight + 'px');
    }
    
    var flowItemWidth = 300;    // 单位宽度
    var flowItemMargin = 10;    // 单位间隔
    
    // 加载数据
    function add()
    {
        for (var i=0; i<20; i++)
        {
            var div = document.createElement("div");
            div.style.cssText = '' + flowItemWidth + 'px;';
            div.className = 'divFlowItem';
            
            // 加载时修改如下
            div.innerHTML = 'hahah';
            div.style.height = 50 + Math.round(Math.random() * 300) + 'px';
            
            $('#divFlow').append(div);
        }
        
        resetFlow();
    }
    
    $(function (){
        // 当窗口改变大小时刷新
        $(window).resize(resetFlow);
        
        // 当滚动到最底部时加载新数据
        $(window).scroll(function () {
            if (($(window).height() + $(window).scrollTop()) > $('body').height()) {
                add();
            }
        });
        
        add();
    });
    </script>
    
    </body></html>

    下载:http://files.cnblogs.com/zjfree/jsFlow.rar

  • 相关阅读:
    sql 用Group by分组后,取每组的前几条记录
    mac安装 配置 ant
    js日期时间比较函数
    hibernate下载包中配置文件路径
    dbvis MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1
    严重: Exception starting filter struts2解决方法!
    【Linux】进程优先级、进程nice值和%nice
    【Algorithm】二分查找
    【php】thinkphp以post方式查询时分页失效的解决方法
    【C语言】练习5-8
  • 原文地址:https://www.cnblogs.com/zjfree/p/3483315.html
Copyright © 2011-2022 走看看