首页 > 网页教程 > CSS > 正文

网页瀑布流布局的几种实现方式分析

2012-01-18 10:43:13   来源:TaobaoUED

优点:

直接 CSS 定义,最方便了;

扩展方便,直接往容器里添加内容即可。

缺点:

只有高级浏览器中才能使用;

还有一个缺点,他的数据块排列是从上到下排列到一定高度后,再把剩余元素依次添加到下一列,这个本质上就不一样了;

鉴于这两个主要缺点,注定了该方法只能局限于高端浏览器,而且,更适合于文字多栏排列。

3) 绝对定位。即 Pinterest ,Mark之,KISSY 采用的方式:

\

可谓是最优的一种方案,方便添加数据内容,窗口变化,列数/数据块都会自动调整;

线上列子。

缺点:

需要实现知道数据块高度,如果其中包含图片,需要知道图片高度;

JS 动态计算数据块位置,当窗口缩放频繁,可能会狂耗性能。

KISSY.Waterfall 实现思路

KISSY 的 Waterfall 组件主要包含两个部分,一个是对现有数据块进行排列计算各自所在的位置; 二是下拉滚动时,触发加载数据操作,并把数据添加到目标容器中。

1) 数据块排列,算法步骤简述下:

初始化时,对容器中已有数据块元素进行第一次计算,需要用户给定: a,容器元素 — 以此获取容器总宽度; b,列宽度; c,最小列数; 最终列数取的是容器宽度/列宽度和最小列数的最大值,这样保证了,当窗口很小时,仍然出现最小列数的数据;

获得列数后,需要保存每个列的当前高度,这样在添加每个数据块时,才知道起始高度是多少;

依次取容器中的所有数据块,先寻找当前高度最小的某列,之后根据列序号,确定数据块的left,top值,left 为所在列的序号乘以列宽,top 为所在列的当前高度,最后更新所在列的当前高度加上这个数据块元素的高度,至此,插入一个元素结束;

当所有元素插入完毕后,调整容器的高度为各列最大的高度值,结束依次调整;

性能效率上的注意点: a,如果当前正在调整中,又触发了 resize 事件,需要将上次调整暂停后执行这次调整(见 timedChunk 函数); b,resize 触发会很频繁,可以将回调函数缓存一段时候后执行,即当这段时间内多次触发了resize事件,但回调函数只会执行一次(见 S.buffer 函数)

感兴趣的可以参见源码。

2) 异步加载数据,前面讲的是如何对容器中已有元素进行排列,但很多情况下,还需要不断加载新数据块,为此专门设计了一个独立的模块 KISSY.Waterfall.Loader,其实这个功能就更简单了,仅包含两个步骤:

绑定滚动事件,并确定预加载线高度值,即滚动到哪个高度后,需要去加载数据,其实这个就是列的最小高度值,这样当前滚动值和最小高度值比较一下即可判断出来,是否要触发加载数据;

加载数据,为了不对数据源做太多限制,完全由使用者自己决定数据源从哪边获取和其格式,这样更好的方便用户使用。为此,该组件只提供一个 load(success,end) 接口,怎样load 由用户自己去定义,而其中的 success/end,分别给出如何添加新数据(suceess 即同 addItems)/如何停止加载的接口。这样真是太方便了~~

感兴趣的可以参见源码。

KISSY。Waterfall 示例和文档

看到这边,是不是很想试用一下~~ 嗯嗯,这里给出一些相关学习资料和示例,以供参考:

Waterfall API 文档,相关构造器,配置项,方法都在这里; http://docs.kissyui.com/docs/html/api/component/waterfall/

示例,包含静态和动态两种。http://docs.kissyui.com/docs/html/demo/component/waterfall/

欢迎试用和提出意见~~


栏目搜索>>分类导航
Flash幻灯 jQuery幻灯 JS幻灯 Flash相册 jQuery相册 图片特效 导航菜单 广告代码 在线客服 表单按钮 其它特效

HTML CSS JavaScript Dreamweaver Fireworks 设计分享

建站教程 网站运营 实用工具 网页模板 网页素材
CSS酷站 网上购物 设计团队 设计博客


教程排行榜
21个令人惊叹的CSS技术(案例)展示
HTML5的Video标签详细说明手册
看这些用CSS3绘制的图标,你震撼了吗
如何使一个DIV层居中于浏览器中?
IE PNG Fix—让IE6完美支持PNG透明图片的插件
加一段代码让IE6支持hover伪类效果
CSS Sprite(CSS精灵)的优点和使用方法
最新的IE6、IE7和IE8的CSS BUG汇总列表
深入理解CSS的inherit与auto之间区别
CSS3教程:17种用CSS实现的很酷炫的立体网...
用浮动清除LI元素在IE6中底部3像素的BUG
解决IE6下PNG图片透明的最佳方法
IE的几个最常见BUG及解决方案
div+css 兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器方法
CSS样式的postion属性absolute和fixed的区别
DIV+CSS布局两列右列宽度自适应布局的不同...
下载排行榜
jQuery图片特效代码 带缩略图和文字标题简...
仿淘宝商城天猫首页jQuery多格焦点幻灯图特...
仿QQ商城焦点图jquery幻灯特效代码
宽屏flash+xml焦点幻灯图特效代码
效果媲美flash的jQuery幻灯代码支持多种切换效果
3D立体效果的flash+xml照片墙相册展示代码
带标题和数字导航的JS焦点幻灯特效代码
31款简单实用的CSS+JS下拉菜单脚本
漂亮的jquery+Lightbox灯箱效果图片展示特效代码
基于mootools有7种效果的Gallery(画廊)幻灯相册代码
超酷HTML5图片特效代码支持全屏显示
漂亮的jquery画廊相册特效支持缩略图和键盘...
可自动展开和折叠收起的QQ在线客服代码
半透明立体质感的宽屏flash+xml焦点幻灯代码
基于jQuery的首页自动收缩全屏广告代码
超酷3D摩天轮flash+xml幻灯相册特效源码