Pinterest采用瀑布流的方式网页设计

文章描述:浅谈个人在瀑布流网页的实现中遇到的问题和解决方法.

先上Demo

瀑布流排序 : http://cued.xunlei.com/demos/publ/demo1.html

瀑布流+无限拖 http://cued.xunlei.com/demos/publ/demo2.html

随着pinterest的走红,瀑布流式的布局被越来越多的网站所使用,这种布局确实有很多好处,图片列表页有很强大的视觉感染力,而且还提高了用户“发现好图”的效率。瀑布流的实现有很多种方式,之前淘宝UED有篇文章详细的介绍过各种方式的优劣。今天我们主要讨论一下绝对排序来实现瀑布流的方式 即 Pinterest 采用的方式。

首先说下瀑布流的排序算法,参考demo1,思路非常简单,我们把瀑布流拆成三个部分来看:容器、列、格子

1.先计算当前屏幕最多能容纳几列瀑布,其值为 “向下取整(屏幕可见区域宽度/(格子宽度+间距))”;

2.为了保证容器的居中,将容器的宽度设置为 列数* (格子宽度+间距) – 间距,这里需要注意的是 当容器的宽度计算出来之后再显示,否则会造成页面宽度的抖动,影响体验。;

3.排序开始,先把前N(N为列数)个格子分别放到每一列中,然后每次寻找高度最小的一列,把格子放进去(left值为列序号*(格子宽度+间距),top值为 列高+间距),并刷新列的高度,遍历所有格子直到所有的格子都被排序。

最后将事件句柄绑定到window.onload和window.onresize上,一个瀑布流布局的页面就出来了。

这样的排序算法看起来很美好,可真正结合异步加载数据应用到页面里还要解决以下几个问题

1.当缩放浏览器窗口时会不断地触发事件,如果每次都响应的话会狂耗性能,需要在缩放动作结束后再执行重排方法。

2.页面滚动到底部请求数据成功之后只对新增的节点重排。

3.如果服务器无法给出图片高度,需要在图片加载完毕之后再进行重排。

第一个问题我是用setTimeout和clearTimeout来解决的,思路是窗口变化之后开始计时,如果窗口还在变换则从新开始计时,窗口不再变化则延时(很短的时间)触发重排事件。暂时只想到这个,这里应该还有更好的方法。

代码如下

var re;
 window.onresize = function() {clearTimeout(re);re = setTimeout(resize,100);
 };

第二个问题在于如果每次有新的数据加载,都要对整个容器内的节点进行重排,非常消耗性能。解决思路:

1.将列保存在全局数组中,每次重排或者新增格子之后更新数组的数据,这样下次执行排序算法的时候可以直接调用。

2.将新增格子保存在数组中作为参数传递给排序算法,仅对新格子进行遍历和操作。

第三个问题是如果服务器无法给出图片尺寸,那么必须在图片完全加载完毕之后才可进行排序(因为高度是实时获取的,图片不全高度有误差),这里没有什么好办法,只能遍历图片,每张图片加载成功后执行一个回调函数,将加载成功的图片数量+1,当加载成功的图片数量等于图片总数的时候执行排序方法。缺点是有一张图片加载不成共就无法看到所有的,真正项目中还是需要在异步加载数据的时候获取图片尺寸。

好了,以上就是在这次瀑布流实现过程中遇到的问题和解决方法,由一开始加载3-4屏就卡死到现在可以无限加载(ff,chrome),深感优化js的必要性和无限性。一点小心得写在这里权当抛砖引玉,大家对瀑布流实现的优化有什么见解欢迎一起交流讨论。

作者:xwei

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索间距
, 图片
, 排序
, 瀑布流
, settimeout加载图片
, 容器
, 异步加载获取数放数组
, #图片流
, 宽度
, ios瀑布流的实现
, 异步排序
, iOS纵向瀑布流
, iOS瀑布流
格子
pinterest瀑布流、pinterest网页版、瀑布流网页、网页瀑布流代码、瀑布流网页模板,以便于您获取更多的相关知识。

时间: 2024-09-15 08:14:51

Pinterest采用瀑布流的方式网页设计的相关文章

用瀑布流的方式在网页上插入图片的简单实现方法_javascript技巧

当我们的网页需要插入很多图片的时候,为了美观,我们可以选择用瀑布流的方法插入图片 首先我们在body里面放入我们需要展示的图片 <div id="box"> <div class="dinwei"> <div class="pic"> <img src="image/1.jpg"> </div> </div> <div class="din

“瀑布流”不是万金油 不能忽略网站的设计重点

在这个以"快速跟进"为发展宗旨的时代,当Pinterest以"瀑布流"的网站布局亮瞎了用户眼球之后,这种布局方式就彻底泛滥了,到处都是尼玛的瀑布流!管你是新创建的还是重新设计的网站,都以Pinterest唯马首是瞻,不带点瀑布范儿都不好意思见人.可是,别人的成功是不可复制的.别以为仅凭一个"瀑布流"就能让你的网站熠熠生辉千秋万代! Pinterest的"瀑布流"布局方式是通过jQuery Masonry插件密集但美观地展示大量

浅谈瀑布流网页实现中遇到的问题和解决方法

  先上Demo 瀑布流排序 : http://cued.xunlei.com/demos/publ/demo1.html 瀑布流+无限拖 http://cued.xunlei.com/demos/publ/demo2.html 随着pinterest的走红,瀑布流式的布局被越来越多的网站所使用,这种布局确实有很多好处,图片列表页有很强大的视觉感染力,而且还提高了用 户"发现好图"的效率.瀑布流的实现有很多种方式,之前淘宝UED有篇文章详细的介绍过各种方式的优劣.今天我们主要讨论一下绝

浅谈个人在瀑布流网页的实现中遇到的问题和解决方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 先上Demo 瀑布流排序 : http://cued.xunlei.com/demos/publ/demo1.html 瀑布流+无限拖 http://cued.xunlei.com/demos/publ/demo2.html 随着pinterest的走红,瀑布流式的布局被越来越多的网站所使用,这种布局确实有很多好处,图片列表页有很强大的视觉感

网页设计师指引:当前的网页设计趋势

文章描述:设计师和开发者都需要和市场接轨并跟上潮流的脚步,但是所谓的潮流是当下的,未来确是未知的.我们的确需要保证自己不被行业趋势甩到队尾,但更重要的是在浪潮中适应和学习. 技术的革新带动了设计行业的的迅猛发展,这使得设计师和开发者有了更广阔的的探索天地.而网页设计也越发不再那么循规蹈矩,许多团队和公司都做了很多思考和创意.所以在我们适应着现代设计潮流的同时,不妨也来看看现阶段网页设计大致的趋势和风格吧.我不敢大言不惭的说这就是当下网页设计的趋势,这只是本人对当下网页设计做出的一些小总结.希望这

当下网页设计趋势

  1.响应式网页设计(Responsive Web Design) 现在越来越多用户都拥有多种终端:台式机,笔记本,平板电脑,手机,能够适应不同尺寸显示屏的网页是现在的潮流,甚至是未来很长一段时间的设计趋势.那么响应式网页设计就是来解决这个问题的.这种特别的开发方式能保证网页适应不同的分辨率,让网页要素重组,使其无论在垂直的平板电脑还是智能手机上,都能达到最好的视觉效果. 除了多终端的多样化,我们还可以看到我们的电脑屏幕,手机屏幕都在不断变大,而在对未来生活的预测.概念设计里,"屏幕"

当下最热门的网页设计趋势总结

  技术的革新带动了设计行业的的迅猛发展,这使得设计师和开发者有了更广阔的的探索天地.而网页设计也越发不再那么循规蹈矩,许多团队和公司都做了很多思考和创意.所以在我们适应着现代设计潮流的同时,不妨也来看看现阶段网页设计大致的趋势和风格吧. 我不敢大言不惭的说这就是网页设计的必然趋势,这只是本人对当下网页设计做出的一些小总结.希望这样的归类总结能给你带来更多的思路和想法. 01. 响应式网页设计(Responsive Web Design) 现在越来越多用户都拥有多种终端:台式机,笔记本,平板电脑

浅谈当下网页设计趋势

中介交易 SEO诊断 淘宝客 云主机 技术大厅 技术的革新带动了设计行业的的迅猛发展,这使得设计师和开发者有了更广阔的的探索天地.而网页设计也越发不再那么循规蹈矩,许多团队和公司都做了很多思考和创意.所以在我们适应着现代设计潮流的同时,不妨也来看看现阶段网页设计大致的趋势和风格吧.我不敢大言不惭的说这就是当下网页设计的趋势,这只是本人对当下网页设计做出的一些小总结.希望这样的归类总结能给你带来更多的思路和想法. 1.响应式网页设计(Responsive Web Design) 现在越来越多用户都

网页设计中图片展现形式的思考

图片,是构成网页的基本元素之一.图片不仅能够增加网页的吸引力,传达给用户更加丰富的信息,同时也大大地提升了用户在浏览网页的体验.图片的展示形式丰富多样,不同形式的图片展现也让浏览网页的乐趣变得更加多样化. 跟随我们分别来体验一下目前存在的各种图片展现形式,让我们的眼睛去旅行吧. 一.多图展现 图片限制最大高度或宽度并进行矩阵平铺展现,这是最常见的多张图片展现形式.不同的边距与距离可产生不同的风格,用户一扫而过的快速浏览可以在短时间获得更多的信息.同时,鼠标悬浮时显示更多信息或功能按钮,既避免过多