zoukankan      html  css  js  c++  java
  • 最少代码的瀑布流实现

    最少代码的瀑布流实现

    先看效果图吧:

    JS代码先放上来给大家看下思路。具体实现还是需要css和html代码的,可以看我的在线源代码和效果:

    全屏,chrome,浏览最佳

    http://runjs.cn/detail/j9qlhajc

    复制代码
    $(function(){
          $('#brand-waterfall').waterfall();
    });
    
    // 瀑布流插件
    // pannysp 2013.4.9
    ;(function ($) {
        $.fn.waterfall = function(options) {
            var df = {
                item: '.item',
                margin: 15,
                addfooter: true
            };
            options = $.extend(df, options);
            return this.each(function() {
                var $box = $(this), pos = [],
                _box_width = $box.width(),
                $items = $box.find(options.item),
                _owidth = $items.eq(0).outerWidth() + options.margin,
                _oheight = $items.eq(0).outerHeight() + options.margin,
                _num = Math.floor(_box_width/_owidth);
    
                (function() {
                    var i = 0;
                    for (; i < _num; i++) {
                        pos.push([i*_owidth,0]);
                    } 
                })();
    
                $items.each(function() {
                    var _this = $(this),
                    _temp = 0,
                    _height = _this.outerHeight() + options.margin;
    
                    _this.hover(function() {
                        _this.addClass('hover');
                    },function() {
                        _this.removeClass('hover');
                    });
    
                    for (var j = 0; j < _num; j++) {
                        if(pos[j][1] < pos[_temp][1]){
                            //暂存top值最小那列的index
                            _temp = j;
                        }
                    }
                    this.style.cssText = 'left:'+pos[_temp][0]+'px; top:'+pos[_temp][1]+'px;';
                    //插入后,更新下该列的top值
                    pos[_temp][1] = pos[_temp][1] + _height;
                });
    
                // 计算top值最大的赋给外围div
                (function() {
                    var i = 0, tops = [];
                    for (; i < _num; i++) {
                        tops.push(pos[i][1]);
                    }
                    tops.sort(function(a,b) {
                        return a-b;
                    });
                    $box.height(tops[_num-1]);
    
                    //增加尾部填充div
                    if(options.addfooter){
                        addfooter(tops[_num-1]);
                    }
                })();
    
                function addfooter(max) {
                    var addfooter = document.createElement('div');
                    addfooter.className = 'item additem';
                    for (var i = 0; i < _num; i++) {
                        if(max != pos[i][1]){
                            var clone = addfooter.cloneNode(),
                            _height = max - pos[i][1] - options.margin;
                            clone.style.cssText = 'left:'+pos[i][0]+'px; top:'+pos[i][1]+'px; height:'+_height+'px;';
                            $box[0].appendChild(clone);
                        }
                    }
                }
            });
        }
    })(jQuery);
    复制代码
     
     
    分类: javascriptjquery
    标签: jquery瀑布流js
  • 相关阅读:
    常用的Javascript设计模式
    jQuery动画高级用法——详解animation中的.queue()函数
    区分苹果Safari浏览器
    自定义 placeholder 文本颜色
    Three.js资源
    动态添加样式表规则
    GitHub 上一份很受欢迎的前端代码优化指南
    [转载]盒模型display:-webkit-box;的使用
    CSS3 Background-size
    Ubuntu上安装torque过程
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3011301.html
Copyright © 2011-2022 走看看