在项目中使用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. 关于SqlServer连接错误

    以前用数据库好好的,今天突然就出现连接错误,贴出出错误消息 出现这种错误的原因:服务里面sqlserver服务没有打开. 解决方案 : 计算机右键,打开管理,找到服务,把服务里面的SQL Server ...

  2. 抓取DUMP日志

    http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx procdump -ma -c 60 -s 10 -n 3 <PID ...

  3. ({i:0#.w|nt authority\iusr})Sharepoint impersonates the IUSR account and is denied access to resources

    This hotfix makes a new application setting available in ASP.NET 2.0. The new application setting is ...

  4. java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

    问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...

  5. SHOI2013 扇形面积并

    题目链接:戳我 补一张图 我们尝试把圆上的扇形转化成直线上的矩形--我们维护[1,2*m]的区间,那么每个能产生贡献的子区间的长度*第K大的半径的平方的总和就是answer了. 怎么转化呢?左端点为a ...

  6. linux中使用unzip命令中文乱码解决办法

    今天在使用unzip进行解压缩文件时,发现解压出的文件中文乱码,最后使用如下命令解决: unzip -O CP936 xxx.zip 特此记录一下.

  7. 【文文殿下】CF1029F Multicolored Markers

    这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...

  8. wireshark 1.10.0 编译 及 协议解析部分的一些变化

    wireshark不久前升级到1.10.0稳定版,这个版本正如其版本号一样,相比1.8.x有较大变化. 我们先说说在windows下编译的问题,1.8.4/1.8.6版本的编译见我的文章:http:/ ...

  9. Linux服务器核心参数配置

    使用Linux作为长连接的web服务器时,为了增加服务的容量,以及处理性能,需要修改一些参数. 一.多进程绑定CPU 1.使用taskset命令可以绑定进程到指定CPU,以减少多核CPU环境中,单进程 ...

  10. 创建第一个flask项目

    安装flask模块 pip install flask或conda install flask 创建一个run.py文件,文件内容如下: from flask import Flask app = F ...