商业机会 产品大全 企业名录 我商务中心 | | 手机站 网址:hefeihongwei.qy6.com 供应瀑布流网页的实现中遇到的问题_合肥宏伟家具回收公司
合肥宏伟家具回收公司
联系人:余先生 先生 (经理)
电 话:0551-4269139
手 机:

产品目录

供应瀑布流网页的实现中遇到的问题

留言询价
详细说明

    随着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的必要性和无限性。一点小心得写在这里权当抛砖引玉,大家对瀑布流实现的优化有什么见解欢迎一起交流讨论。http://www.ahyanke.com/

http://www.055lzl.com/

http://www.hefeijiajv.com/

http://www.junjie330.com/

http://www.hf2s.com/

http://www.01kt.com/

http://jsgwy.01kt.com/

http://www.gwyah.com/ahgwy/

http://www.ahadsl.com/

 
合肥宏伟家具回收公司
余先生 先生 (经理)  
电  话: 0551-4269139
传  真:
移动电话:
在线联系:
公司地址: 中国安徽合肥市蒙城北路11号
邮  编:
公司主页: http://hefeihongwei.qy6.com(加入收藏)
 



其它商业信息
 1 直接到第
1 条信息,当前显示第 1 - 1 条,共 1

公司首页 | 公司介绍 | 产品展示 | 供求商机 | 诚信档案 | 联系方法 | 加入收藏
合肥宏伟家具回收公司 公司地址:中国安徽合肥市蒙城北路11号
余先生 先生 (经理) 电话:0551-4269139 传真:
免责声明: 以上所展示的信息由会员自行提供,内容的真实性、准确性和合法性由发布会员负责,企业录对此不承担任何责任。如有侵犯您的权益,请来信通知删除。

机械 仪器 五金 电子 电工 照明 汽摩 物流 包装 印刷 安防 环保 化工 精细化工 橡塑 纺织 冶金 农业 健康 建材 能源 服装 工艺品 家居 数码 家电 通讯 办公 运动、休闲 食品 玩具 商务 广告 展会 综合
提供服务支持 © 企业录 | 移动端