JSFiddle - React, Tailwind, and code Playground
by tu genhua
HTML
<div id="container">
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_000.jpg" /><p>00</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_001.jpg" /><p>01</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_002.jpg" /><p>02</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_003.jpg" /><p>03</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_004.jpg" /><p>04</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_005.jpg" /><p>05</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_006.jpg" /><p>06</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_007.jpg" /><p>07</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_008.jpg" /><p>08</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_009.jpg" /><p>09</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_010.jpg" /><p>10</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_011.jpg" /><p>11</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_012.jpg" /><p>12</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_013.jpg" /><p>13</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_014.jpg" /><p>14</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_015.jpg" /><p>15</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_016.jpg" /><p>16</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_017.jpg" /><p>17</p></div>
<div class="cell"><img src="http://yl.sofedu.com/Public/images/images/p_018.jpg" /><p>18</p></div>
<div class="cell"><img...
CSS
body,div{ margin:0; padding:0}
img{ border:0}
#container{text-align:center;}
#container .cell{ padding:5px 5px 0; border:1px solid #E3E3E3; background:#F5F5F5; margin-top:10px}
#container p{ line-height:20px; margin-top:5px}
JavaScript
/**
* JS瀑布流布局
* @ver 1.0
* @param {options,callback} 对象配置项 回调
**/
function WaterFall(options,callback) {
var self = this;
self.options = $.extend({},defaults,options || {});
this.cache = {
$columns : 0, // 所有的列
loadIndex : 0 // 加载的次数
};
self.callback = callback;
this._init();
}
$.extend(WaterFall.prototype,{
/*
* 代码初始化 {创建列操作 对已存在的元素排序 窗口缩放或滚动事件}
* @method _init {private}
*/
_init: function(){
var self = this,
cache = self.cache;
var cfg = self.options;
if(cfg.container == '') {return;}
cache.$columns = self._createColumn();
//重排已存在元素时强制不渐显
self.render($(cfg.container).find(cfg.cellCls),false);
var scrollTime,
resizeTime;
$(window).unbind('scroll').bind('scroll',function(){
scrollTime && clearTimeout(scrollTime);
scrollTime = setTimeout(function(){
self._onScroll();
},100);
});
$(window).unbind('resize').bind('resize',function(){
resizeTime && clearTimeout(resizeTime);
resizeTime = setTimeout(function(){
self._onResize();
},100);
});
},
/*
* 创建列
* @method _createColumn {private}
*/
_createColumn: function(){
var self = this,
cfg = self.options;
var columnLen = self._calculateColumns();
var html = "";
for(var i = 0; i < columnLen; i++) {
html+= '<div class="'+cfg.columnClassName+'" style="width:'+cfg.columnWidth+'px;display:inline-block;vertical-align:top;*display:inline;zoom:1;margin-left:'+cfg.columnSpace/2+'px;margin-right:'+cfg.columnSpace/2+'px;overflow:hidden"></div>'
}
$(cfg.container).prepend(html);
return $('.'+cfg.columnClassName,cfg.container);//列集合
},
/*
* 共有多少列
* 计算方法: maxCol = Math.floor(屏幕可见区域的宽度或者父容器的宽度/(格子宽度+间距));
* @method _calculateColumns {private}
*/
_calculateColumns: function(){
var self = this,
cfg = self.options;
var num = Math.floor($(cfg.container).outerWidth()/(cfg.columnWidth *1 + cfg.columnSpace*1));
if(num < 1){num = 1;}
return num;
},
/*
* 渲染内容
* @param {elements flag} 所有.cell类元素 ...