网易聚合阅读的出现的确让人惊艳了一下。流畅的交互,使碎片化的新闻资讯像报纸一样摊在眼前,这是信息大爆炸的时代产物。不管你能不能接受这种新阅读形式,事实上,每天越来越多的新闻层出不穷,还没被人看到就已成为了“旧闻”。回归报纸的版面设计,堆叠新闻模块,让用户告别一条接一条整齐的新闻链接,而是在一个版面上提供更多的信息,不失为一种尝试。
而抛去产品的层面,从前端方向来看,“聚合阅读”也有许多值得学习的地方。这几天研究了一下源码,谈谈它随机布局的实现,以及一些优化的措施。
##demo
##一.怎样定义格子对象
每个格子对象,都至少应该有这5个属性:
- left:距离左边界的位置
- top:距离上边界的位置
- width:格子宽度
- height:格子高度
- background:格子颜色
逐个去定义对象无疑是愚蠢的:
这样不仅不利于后期维护,而且构造格子的嵌套关系也相对麻烦。
网易的做法是使用“交替切割”的方式来做:
- 将大块先切成两列。
- 左列(红色部分)再切成三行,右列(褐,黄,蓝部分)也切成三行。
- 对形成的6个小块,再进行列的切割
整个做法就是“列-行-列-行-……”这样的交替切割。所以它的对象是这样设置的,其中random属性可以约定同级的cols或rows是否可以随机变换位置,width和height的值是规定一个父级块的分割比例。其设置的形式例如(例子与demo的设定无关):
##二.递归调用切割函数
##三.切割函数
切割函数挺有意思的,下次想再用一篇文章来详细写一下,在这里仅贴出参考的源码。
##四.最后
完成到这一步,我已不记得声明对象时出了多少次错误。各种尖括号,方括号,逗号和分号翩翩起舞时,你一定跟我一样很想念coffee的语法糖…