在项目中使用angular-deckgrid+ng-infinite-scroll实现瀑布流的无限加载。但是实际测试中发现deckgrid有2个比较严重影响体验的BUG:

  1. 每次添加新的card,整个deckgrid都会重新加载,导致用户无法停留在刚才浏览的位置。正确的表现应该是只加载新添加的项,同时保持浏览位置不变。
  2. Deckgrid总是将各项平均分配到各个列,如果某个列的卡片高度大部分比较大,可能导致某个列非常的长,而其他列非常的短。

第一个问题

该问题在官方项目的issue#68有提及,使用symrad/angular-deckgrid的版本可解决此问题,但同时引入了另外一个问题:当deckgrid只有一项时,如果重新设置同样的数据,数据源仍然只有一项,但是显示上却变成两项(一模一样的两项),如下图所示:

我对该情况做了特殊处理以解决此问题,查看github源码

第二个问题

第二个问题其实也就是官方项目的issue#75,但是没有最终解决方案,只能自己动手了。

正如原作者所说的,要给出通用的解决方案是比较复杂而且繁琐的,原因在于给deckgrid的model添加新项时,页面还没渲染,所以没法提前获取高度来控制怎么更加地分配新项到各个列上。但是如果你像我一样是想实现无限下拉加载的瀑布流效果的话,那这个问题是可以解决的,具体思路如下:

首次生成deckgrid时,没法获取高度,但是当下拉滚动条以加载新项时,是可以获取到已经生成deckgrid各列的高度的。所以在添加新项之前,可以先对比已经生成的各列的高度,然后确定出更好地分配新项到各个列的策略。

这里我采用的是一个比较简单的策略,找出最高的那一列和最低的那一列,如果两者相差超过600px就做高度均衡,就将新项的第一项填充到高度最低的那一列,然后剩余的新项仍然按照原策略继续分配。也就是说,如果需要高度均衡,每次添加新项,高度最低的那列比其他列多添加一项。这个简单的方法保证了各个列的高度不会相差太大。

具体可参考我在github的源码,我的项目也使用了自己修改过的版本。

解决angular-deckgrid高度不均衡和重加载的问题的更多相关文章

  1. [Nginx] 在Linux下的启动、停止和重加载

    Nginx的启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c参数指定配置文件路径.   Nginx的停止 ...

  2. paip.ikanalyzer 重加载词库的方法.

    paip.ikanalyzer 重加载词库的方法. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn ...

  3. 清空FORM表单的几种方式 Reset 重加载

    1. form中定义name <form name = "sbform" action="sb_add.php" method="post&qu ...

  4. Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片

    Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...

  5. Layui数据表格/搜索重加载/分条件操作/工具条监听

    <div class="layui-layout layui-layout-admin" style="padding-left: 20px;"> ...

  6. 解决Javascript大数据列表引起的网页加载慢/卡死问题。

    在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死). 也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也 ...

  7. 利用Javascript解决HTML大数据列表引起的网页加载慢/卡死问题。

    在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死). 也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也 ...

  8. 解决VS2012新建MVC3等项目时,收到加载程序集“NuGet.VisualStudio.Interop…”的错误

    vs2012来做一个mvc3的项目,哪知在创建ado数据模型时跳出这么一个东东 错 误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0 ...

  9. js实现图片(高度不确定)懒加载

    最近一直在弄广告页,由于广告页几乎都是图片拼凑起来的,为了减少服务器压力和带宽,采用图片懒加载方式,但是我们的图片高度又不确定,所以我在网上下载了echo.js自己改了一下. 大体思路是:让首页先加载 ...

随机推荐

  1. vim编辑后权限不够保存问题解决方案

    常常忘记了sudo就直接用vim编辑/etc内的文件,等编辑好了,保存时候才发现没权限. 1.曲线救国:先保存个临时文件,退出后再sudo cp回去 2.可以直接用 :w !sudo tee % 查阅 ...

  2. k8s 入门系列之介绍篇

    •Kubernetes介绍1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境2.什么是ku ...

  3. IdHTTPServer使用注意问题

    如果在同一电脑上运行多个IdHTTPServer实例,IdHTTPServer使用时候,一定要注意“DefaultPort”属性,其实真正绑定端口是这个属性决定的,所以希望IdHTTPServer绑定 ...

  4. 【OCP 12c】最新CUUG OCP-071考试题库(61题)

    61.(18-6) choose the best answer: View the Exhibit and examine the structure of the CUSTOMERS table. ...

  5. pymongo 学习

    查看一条记录,返回一条 dict 记录 db.Account.find_one({"UserName":"keyword"}) 查看某一列的一条记录(此时的1, ...

  6. jquery 通过attr获取属性只有一个值的解决

    var a = []; $($('select.list[data-target="' + target + '"]').find("option:selected&qu ...

  7. Libra的第一天

    wuli乖乖,今天是你降生第一天,以后的几年可能我们都会朝夕相处,你的成长就是我的向上,一起加油吧

  8. (C/C++) STL 標頭檔 algorithm (一)

    因為解題需求認識了一些STL相關funciton. 分別是 max_element (ForwardIterator first, ForwardIterator last); min_element ...

  9. [转] CDH6 安装文章链接收集

    CentOS 7下Cloudera Manager及CDH 6.0.1安装过程详解 http://blog.51cto.com/wzlinux/2321433?source=dra Cloudera ...

  10. Mac系统升级至OS X Mavericks后Genymotion出现的问题及解决方法

    Apple的系统升级终于免费了,可开心满满地升级到OS X Mavericks后,Android模拟器之王Genymotion罢工了.遇到两个问题:1. Unable to load VirtualB ...