详细解析网页瀑布流布局的开发实践

2016-02-17 00:38 14 1 收藏

图老师小编精心整理的详细解析网页瀑布流布局的开发实践希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 平面设计 】

瀑布流的布局方式展现的内容通常是扁平化、琐碎的东西。首先吸引人的应该是图片,并且图片是那种参差不齐的,如果瀑布流中文字过多,会给人很杂乱的感觉,所以瀑布流更适合单纯的图片浏览。

详细解析网页瀑布流布局的开发实践,PS教程,图老师教程网

前不久公司上线的项目–360图片搜索的美女秀场频道,就用到了瀑布流的布局方式,这种纯粹的看美女图片的页面用瀑布流还是挺合适的。

以前并未开发过瀑布流布局的网站,第一个想到的实现方式就是多列浮动,从表面上看这种方式要简单。

传统的定位布局方式

但是,目前主流的瀑布流布局都是采用定位的方式,对每个单元格计算定位值,如下图:

详细解析网页瀑布流布局的开发实践,PS教程,图老师教程网

定位的方式实现起来其实也简单,在窗口 resize 时,也可以方便的对单元格进行重新计算排序。但是计算的频率比较高,如果要做无限的加载数据,以及 resize 时的自适应排列,那么性能就是一个必须要重视的问题。

如果没有任何优化手段,成百上千个单元格本身就很耗资源,resize 时再全部重新计算一遍,可以想象浏览器在这个时候一定很吃力,必然会有浏览器假死的情况。

多列浮动的布局方式

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/pmsj/)

再来看看多列浮动布局的实现方式,多个单元格组成一列,无需对单个的单元格进行定位的计算,然后对整列进行浮动,如下图:

详细解析网页瀑布流布局的开发实践,PS教程,图老师教程网

当然,这种布局方式在无限加载和 resize 时的自适应面前,面对着同样的问题。

自适应窗口

先说 resize 时的布局自适应,虽然浮动布局的计算没有定位那么方便,但要实现自适应的布局还是可以的。比如原来有 4 列,resize 时页面宽度变小了,只能放 3 列了,单元格的总数是不变的,数据的顺序也是固定的,那么只有把原来 4 列里面的单元格全部清空,按照数据的顺序重新计算排序,依次添加到 3 列中。需要注意的是清空的时候并不是把单元格的 DOM 元素给删除掉,而是从 DOM 树提取出来存放在一个文档碎片中,这样就避免了每次都要去创建单元格的 DOM 元素,节省了创建时的性能开销,说得通俗点就是离线操作。

无限加载的挑战

浏览器中运行的 WEB 程序并不能像桌面软件那样会有足够多的 CPU 和内存去使用。当网页中的 DOM 元素的数量呈指数倍的增长,那么其占用的内存也势必会成正比的增长,每个 DOM 元素都会有性能开销,只是通常情况下 DOM 的数量并没有达到需要注意型性能的那个阙值。

无限加载的瀑布流就必须要注意这种由于 DOM 数量庞大而引发出来的性能问题。不能抱着侥幸的心理去认为用户可能滚动不了多长就会跳出。此次做的瀑布流布局的项目压根就没有内页,都是浮层直接展示大图,虽说在一定程度上方便了用户,但同时也给浏览器端很大的性能压力。用户如果不需要跳转一直停留在瀑布流的列表页,只要不关闭这个页面,内存就会一直没有释放的机会。

虽然页面可以无限长,但是用户的显示器的可视区域是有限的,就好比一个再富有的人,他晚上睡觉时占的面积还是那么大,床的面积也是有限的。由于可视区域是有限的,通常会利用这一点对没加载的 DOM 元素作延迟加载,那么反过来,能否对已加载的但不在可视区域的 DOM 元素做文章呢?答案是肯定的,人有多大胆,地有多大产嘛。

当页面向下滚动的时候,瀑布流会创建新的单元格,老的单元格就会随着页面的向下滚动而处于非可视范围,既然都不可见了,那么为了节省性能完全可以把这些老单元格删除掉。当然,也要有技巧性的去删除。如果页面往上滚,滚回去的时候你总不能给用户看白板,不能这样坑人。那么原来删除的还得保持原位置加回去。不悠着点的话,光是这样一删一加的两个动作就够浏览器受的了。作为 WEB 开发者,要时刻都有浏览器是很脆弱的如芒在背的心理。

分组操作

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/pmsj/)

上面说到的有技巧性的删除就是将那些处于非可视区域的 DOM 元素从 DOM 树中提取出来,存储在一个文档碎片的容器中。DOM 元素脱离了 DOM 树也会大大节省性能的开销,这样就达到了节省性能的目的。当然如果仅仅只做到这一步还不太好意思说是技巧。正是因为这个,我将 HTML 结构再包裹一层,在 ul 外面添加了一个

div ,称之为一组,其真实结构如下图所示。

详细解析网页瀑布流布局的开发实践,PS教程,图老师教程网

在这里,组是比列更大的单位,一组可以是可视区域大小的尺寸( 目前组还没精确到针对不同的分辨率 ),一组里面就是浮动的自适应屏幕分辨率的几列,每列里面就是一个个的单元格。如上图,这样几列就可以组成一组。有了组就可以比较方便的将频繁出入于 DOM 树中的 DOM 元素的性能开销平衡的分配到每一组。可以在页面滚动向下到指定的位置,只删除某一组,继续向下滚再继续删除。每次都删除处于最顶端的那一组,因为是在非可视区域内,用户也不会知道你的删除操作。

页面的高度是由一个个单元格给撑起来的,删除了单元格后,其高度就会出现变化,由此就会导致页面的高度也跟着变化。在删除前计算出组元素的高度,然后设置其 visibility 为 hidden,让其在删除后还保留组元素原有的位置和高度,这样就不会有高度的变化了。

通过的删除非可视区域的 DOM 元素的优化方法,可以让页面始终保持1-2组单元格,只要你组内的单元格的数量能把握好。这样就在一定程度上大大的缓解了了页面中由于 DOM 数量过多而出现的性能开销的问题。

当窗口 resize 达到重新排序的宽度条件时,还是要将页面中所有单元格重新计算排序。由于非可视区域的单元格已经不在 DOM 树中,那么其计算也没什么压力了。那些存储在文档碎片容器中的单元格也还是需要计算的,因为如果此时页面往上滚动时那些离线的单元格还要重新和用户见面嘛,只是这个计算并不是在 DOM 树中而已。

来源:https://www.tulaoshi.com/n/20160217/1576915.html

延伸阅读
在CSS网页布局开发中,会有很多小技巧,新手朋友往往对此很不熟悉。在某一两个小问题上,或许纠缠很长时间才能搞明白,虽然在很多的文档中,多次提及过这方面的内容,但依然有很多朋友在这些问题上犯错。我们今天看看这些CSS技巧,认真读一读,或许您并不能完全理解,您可以在本站进行搜索,扩展您所想要得到的知识,相信您会有很多收获! ...
一篇开拓网页设计思路的文章,虽然有些年代了,但是其中分享的构图技巧到现在依然是非常受用的,如果你能领悟个中精髓,融会贯通。那么今后你设计出来的网站,一定会从格局形势上让客户眼前一亮。 网页给人最直观的感受就是它的页面框架与构造,就像一座大楼的主体框架与形态,你可能记不起东方明珠塔和艾菲尔铁塔是用什么颜色或什么材料涂的...
今天这个案例是腾讯企业QQ的设计实战过程,设计师来聊聊如何以形象内容设计为手段,通过产品化的尝试来实现设计效用的最大化,全文干货,学习戳。 在许多互联网公司中,设计工作往往被视为一项针对产品的服务,服务好产品是设计师职能的优先价值指标。观点固然不错却失于片面,因为服务体系与产品形态在设计内涵中是相互统一的。设计在实现解...
视觉设计趋于简洁化,图文的版式越发显的重要。 现在,让我们一起回到设计中最基础的部分,图文关系是一个很容易出问题的地方,如果我们不知道如何正确处理这些关系,那么最终设计的界面效果将会是非常糟糕。 一起来看看应该如何正确使用它。 图文左对齐排列 四大基本排版方式中,使用得最频繁的就是左对齐,这种以主线为基准左对齐的方...
著名的格林童话故事里面汉赛尔和格莱特知道后母想要在深林里面丢掉他们的计划,将面包屑撒在来时的路上,虽然当月亮升起时,面包屑被鸟吃掉了,但是现在的互联网设计师们从这个故事中找到了灵感,设计出不会被鸟吃掉的固定面包屑。 图1:互联网上各种各样的面包屑 汉赛尔和格莱特为了在森林中找到回家的路,撒下了面包屑,这是一种导航方式...

经验教程

924

收藏

32
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部