市面上已存在的瀑布流式布局的网站:
拼范网:http://www.pinfun.com/
迷尚网:http://www.mishang.com/
凡客达人:http://star.vancl.com/
美丽说:http://www.meilishuo.com/
蘑菇街:http://www.mogujie.com/welcome/
淘宝哇哦:http://wow.taobao.com/
IDsoo:http://idsoo.com/
Topit:http://topit.me/
Mark之:http://markzhi.com/
布兜:http://www.budou.me/
堆糖:http://www.duitang.com/
花瓣:http://huaban.com/
码图网:http://www.markpic.com/popular/
新鲜网:http://www.xinxian.com/
易惊喜:http://www.ejingxi.com/

这两年瀑布流式布局已小有规模,对于浏览器性能问题是个挑战。
瀑布流目前已知有三种实现方式,[我喜欢]采用的是绝对定位的方式进行瀑布流计算。总结一下性能中注意的几点:

要点一:
对于瀑布流式图片布局性能起决定性作用的是img标签必须指定height(width在瀑布流式布局中一般是固定的):
网页的加载顺序是dom会优先加载完成,然后加载远程文件包括图片。绝对定位方式在dom加载完成后会进行计算,然而此时如果没有为img标签指定width与height,会等到图片加载完成浏览器才会渲染出整个元素的高度。所以在dom加载完成之后计算的元素高度是不正确的,确切的说是没有图片的高度的。

要点二:
Ajax动态插入瀑布元素

当通过ajax获取到新数据之后如何追加到当前瀑布流中呢?
起初为了性能优化打算轮循把元素插入到页面各列中,但是页面中的图片高度是不定的,很容易出现高度很高的图片,会留有很不和谐的多余空白,可兼容性差。
最后采用的第二步方案,实时获取元素底部最高的元素轮循插入。即上图中的第2列优先获得插入元素的权利,完成插入后再计算底部最高的元素。
这时就需要性能优化,我们不能每次都动态去取每个元素底部的高度,可以把六个列的值放在一个数组中,依次记录着每列的最后元素的底部高度。再进行对比计算,算出最小高度进行插入。
PS:为性能优化,插入动态数据时轮循的是动态要加入的元素,而非整个页面的所有元素。

要点三:
Dom元素相关的数据重复计算?
当页面Dom加载完成后,获取瀑布流父元素的宽度,根据元素的宽度和间距,计算出有几列,各列绝对定位的left值等…这些数据都要缓存在内存变量中。不是每次执行瀑布流操作都去动态获取计算的。

要点四:
删除中瀑布流中的元素,如何重新排列?
此次版本中删除某个瀑布流元素后,是重新排列页面中所有的元素,虽然封装的方法很简便,但是这样是不够优化的。
后期计划,删除某列中的某个元素, 此列被删除元素下面的元素重新计算排列,减少性能消耗,达到优化。

要点五:
关于改变窗口大小,动态排列
在改变窗口大小的过程,由于onresize在IE多个版本下会有多次触发,每触发一次,瀑布就会重新排列一次,重复执行浪费了性能。
因此在onresize事件中添加延迟优化处理

此版本还有许多细节及优化没有来得及时间处理,后期我们会跟进。希望大家喜欢这个项目,有什么意见请联系我们。
随后我们会将优化QWrap的这个WaterFall扩展组件,提供给QWrap用户使用,丰富组件。

在此感谢QWrap库开发者们的辛勤付出,让开发者有了更多的选择,节省了开发时间,达到敏捷开发。

—–20120224更新-添加删除瀑布流元素整列重新排序(↑要点四)———————————————————————————————-
使用方法见Demo可组件js文件,由于没有指定图片高度,所以瀑布流事件是在页面完全加载之后触发的。

Demo地址:http://www.im9527.com/archives/8

转载于:https://www.cnblogs.com/miss-radish/p/3641876.html

【转】关于WaterFall瀑布流式布局的性能优化相关推荐

  1. 瀑布流式页面布局_微信小程序——实现简单的瀑布流式布局

    写页面时,考虑到美观,良好的用户体验,对于内容的展示我们经常会用到瀑布流式布局,那么如何实现一个简单的瀑布流呢? 瀑布流式布局 原理:遍历数组判断奇偶性,然后分左右排布,左右两边代码基本一致 直接上代 ...

  2. 什么是瀑布流布局?瀑布流式布局的优缺点

    瀑布流又称瀑布流式布局,是一种多列等宽不等高的一种页面布局方式. 视觉表现为参差不齐的多栏布局.随着页面滚动条向下滚动,这种布局会不断加载数据并附加至当前的尾部. 是一种多列等宽不等高的一种页面布局方 ...

  3. 使用css3的网格(Grid),做出瀑布流式布局

    效果如下: 关于Grid(网格) 布局,就看大神阮一峰的Grid 网格布局教程 效果的代码如下: html代码 <!DOCTYPE html> <html lang="en ...

  4. 微信小程序实现简单的瀑布流式布局

    参考原文:https://blog.csdn.net/weixin_39661129/article/details/110935903 实现样式: 分析:应为小程序只有左右两列,完全没有H5动态计算 ...

  5. 流式布局之javascript实现照片瀑布流以及Macy.js插件实现瀑布流

    文章目录 瀑布流的定义 一.实现效果 代码 首先是用javascript自己手写代码实现照片瀑布流 使用插件Mary.js照片流插件实现照片瀑布流 总结 瀑布流的定义 瀑布流是什么? 1.琳琅满目:整 ...

  6. 一小时,学习掌握瀑布流页面布局

    什么是瀑布流 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.其实瀑布流的特点就是参差不齐的排 ...

  7. 不固定图片宽高瀑布流_APP设计学习:瀑布流式的产品UI设计

    看到好的APP产品UI设计,真是忍不住想要停留几秒,慢慢来欣赏.今天学堂君收集了近期不错的优质的APP设计作品,看起来极舒服的UI界面,分享给大家.这一期的重点学习:在APP界面设计当中,如何应用瀑布 ...

  8. 说说瀑布流式网站里那些可人的小细节

    瀑布流式布局,想必设计师们已不再陌生,随着pinterest自2011年开始走红,瀑布流式的布局被越来越多的网站所使用.花瓣网.堆糖网.布兜.发现啦,美丽说,蘑菇街,人人逛街,凡客达人等,复制Pint ...

  9. html流式布局插件,Jquery瀑布流网格布局插件

    插件描述:一款简单且高度可定制的jQuery瀑布流网格布局插件.通过该瀑布流网格插件你可以动态添加和删除各种尺寸的图片,定义图片宽度,设置网格的列数,或使用流式布局方式,甚至还可以通过URL动态添加图 ...

最新文章

  1. ajax同步,异步简单的介绍
  2. 纸牌游戏10点半c语言,python10点半纸牌游戏_【Python】Python编的纸牌游戏
  3. 全球及中国回流冷凝管行业发展前景整体预测及十四五发展趋向展望报告2022-2027年版
  4. conda切换环境_Python多环境管理,你需要知道的几种方法
  5. 正整数 n 所有可能的和式的组合
  6. android点滴27:R文件无法加载 R cannot be resolved to a v...
  7. oracle 微信公众号,关于微信公众号贴代码的方法
  8. SQLAPI报错:API client not set
  9. JasperReports项目中的应用
  10. 动态规划_leetcode322
  11. RabbitMQ架构模型(二)
  12. cass光标大小怎么调_cass7period;0鼠标不显示怎么解决quest;
  13. 华师大计算机在线测试,华东师大:180道心理测试题面试免费师范生
  14. 配置的代理服务器未响应解决方法
  15. iphone开发之仿微信用户引导界面的实现
  16. CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法
  17. sap采购申请自动转采购订单_采购订单_参考第三方销售生成的采购申请
  18. Oracle数据库的基本使用和高级查询
  19. 一个简单的 jQuery 图片裁剪插件----cropper
  20. 逐步释放质疑怎么样释放std::vector所占用的内存空间

热门文章

  1. ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试
  2. 【PyQt5】QT designer + eclipse 集成开发
  3. 【Linux基础】crontab定时命令详解
  4. 网站出现403 Forbidden
  5. Discuz!NT - 在线显示列表 游客 bug 修复
  6. Spring AOP注解方式实现
  7. XAML中格式化日期
  8. 计数排序、桶排序和基数排序
  9. 【调试】Linux下超强内存检测工具Valgrind
  10. centos7 和centos 6的一些区别