解决angular-deckgrid高度不均衡和重加载的问题
在项目中使用angular-deckgrid+ng-infinite-scroll实现瀑布流的无限加载。但是实际测试中发现deckgrid有2个比较严重影响体验的BUG:
- 每次添加新的card,整个deckgrid都会重新加载,导致用户无法停留在刚才浏览的位置。正确的表现应该是只加载新添加的项,同时保持浏览位置不变。
- Deckgrid总是将各项平均分配到各个列,如果某个列的卡片高度大部分比较大,可能导致某个列非常的长,而其他列非常的短。
第一个问题
该问题在官方项目的issue#68有提及,使用symrad/angular-deckgrid的版本可解决此问题,但同时引入了另外一个问题:当deckgrid只有一项时,如果重新设置同样的数据,数据源仍然只有一项,但是显示上却变成两项(一模一样的两项),如下图所示:

我对该情况做了特殊处理以解决此问题,查看github源码。
第二个问题
第二个问题其实也就是官方项目的issue#75,但是没有最终解决方案,只能自己动手了。
正如原作者所说的,要给出通用的解决方案是比较复杂而且繁琐的,原因在于给deckgrid的model添加新项时,页面还没渲染,所以没法提前获取高度来控制怎么更加地分配新项到各个列上。但是如果你像我一样是想实现无限下拉加载的瀑布流效果的话,那这个问题是可以解决的,具体思路如下:
首次生成deckgrid时,没法获取高度,但是当下拉滚动条以加载新项时,是可以获取到已经生成deckgrid各列的高度的。所以在添加新项之前,可以先对比已经生成的各列的高度,然后确定出更好地分配新项到各个列的策略。
这里我采用的是一个比较简单的策略,找出最高的那一列和最低的那一列,如果两者相差超过600px就做高度均衡,就将新项的第一项填充到高度最低的那一列,然后剩余的新项仍然按照原策略继续分配。也就是说,如果需要高度均衡,每次添加新项,高度最低的那列比其他列多添加一项。这个简单的方法保证了各个列的高度不会相差太大。
具体可参考我在github的源码,我的项目也使用了自己修改过的版本。
解决angular-deckgrid高度不均衡和重加载的问题的更多相关文章
- [Nginx] 在Linux下的启动、停止和重加载
Nginx的启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c参数指定配置文件路径. Nginx的停止 ...
- paip.ikanalyzer 重加载词库的方法.
paip.ikanalyzer 重加载词库的方法. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...
- 清空FORM表单的几种方式 Reset 重加载
1. form中定义name <form name = "sbform" action="sb_add.php" method="post&qu ...
- Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片
Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...
- Layui数据表格/搜索重加载/分条件操作/工具条监听
<div class="layui-layout layui-layout-admin" style="padding-left: 20px;"> ...
- 解决Javascript大数据列表引起的网页加载慢/卡死问题。
在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死). 也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也 ...
- 利用Javascript解决HTML大数据列表引起的网页加载慢/卡死问题。
在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死). 也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也 ...
- 解决VS2012新建MVC3等项目时,收到加载程序集“NuGet.VisualStudio.Interop…”的错误
vs2012来做一个mvc3的项目,哪知在创建ado数据模型时跳出这么一个东东 错 误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0 ...
- js实现图片(高度不确定)懒加载
最近一直在弄广告页,由于广告页几乎都是图片拼凑起来的,为了减少服务器压力和带宽,采用图片懒加载方式,但是我们的图片高度又不确定,所以我在网上下载了echo.js自己改了一下. 大体思路是:让首页先加载 ...
随机推荐
- 关于SqlServer连接错误
以前用数据库好好的,今天突然就出现连接错误,贴出出错误消息 出现这种错误的原因:服务里面sqlserver服务没有打开. 解决方案 : 计算机右键,打开管理,找到服务,把服务里面的SQL Server ...
- 抓取DUMP日志
http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx procdump -ma -c 60 -s 10 -n 3 <PID ...
- ({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 ...
- java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...
- SHOI2013 扇形面积并
题目链接:戳我 补一张图 我们尝试把圆上的扇形转化成直线上的矩形--我们维护[1,2*m]的区间,那么每个能产生贡献的子区间的长度*第K大的半径的平方的总和就是answer了. 怎么转化呢?左端点为a ...
- linux中使用unzip命令中文乱码解决办法
今天在使用unzip进行解压缩文件时,发现解压出的文件中文乱码,最后使用如下命令解决: unzip -O CP936 xxx.zip 特此记录一下.
- 【文文殿下】CF1029F Multicolored Markers
这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...
- wireshark 1.10.0 编译 及 协议解析部分的一些变化
wireshark不久前升级到1.10.0稳定版,这个版本正如其版本号一样,相比1.8.x有较大变化. 我们先说说在windows下编译的问题,1.8.4/1.8.6版本的编译见我的文章:http:/ ...
- Linux服务器核心参数配置
使用Linux作为长连接的web服务器时,为了增加服务的容量,以及处理性能,需要修改一些参数. 一.多进程绑定CPU 1.使用taskset命令可以绑定进程到指定CPU,以减少多核CPU环境中,单进程 ...
- 创建第一个flask项目
安装flask模块 pip install flask或conda install flask 创建一个run.py文件,文件内容如下: from flask import Flask app = F ...