打造称心如意的列表控件

简介: 列表是常用的控件,于是要想想怎么弄好它。一、布局迷思话说 N 久之前,矩阵型的布局是用 做到的,那时我为这个算法研究过一阵子(从菜鸟来……)。后来 CSS 布局渐替,到 CSS3,出现过几种布局方案。

列表是常用的控件,于是要想想怎么弄好它。

一、布局迷思

话说 N 久之前,矩阵型的布局是用 <table> 做到的,那时我为这个算法研究过一阵子(从菜鸟来……)。后来 CSS 布局渐替,到 CSS3,出现过几种布局方案。

  • 浮动,设置 float:left
  • 内联级块,设置 display:inline-block
  • CSS 3 弹性布局,设置 box/box-flex/box,根据版本新旧而不同

他们的优缺点如下表,

float:left display:inline-block box/box-flex/box
经典方案,各浏览器都支持 可解决 float:left 高度不一致的问题,除早期 ie 外,各浏览器都支持 完美的解决上述问题,而且更灵活,参见我之前写的
不能等高,高度不一致出现布局错位 有间隙空白的问题,比较蛋疼 老版 box 居然不支持换行(参见:“由于老版语法对多行支持不好”),这个很致命,而且版本繁杂,不易书写

经过一番权衡,最后还是采取 float:left 的方案。针对其相关问题会特定的解决即可。例如高度不一致出现布局错位,针对该问题,我想到两个方法,各有优劣:

  • 因为屏幕宽度、列数是固定的,所以可以计算 item 的最终宽度,相关方法参见《多列列表控件中图片尺寸处理的若干问题》
  • 遍历图片,取一固定高度,然后其余强行统一即可。这是图片加载并显示后的动作,有一点延迟性并导致 reflow,而且 resize 事件(也就是切换横竖屏的时候)这个有问题。但这种写法比较简单,现正采用。

既然多列的矩阵型布局可以做了,那么单列的列表便不成问题。

二、各种杂项特性

要打造称心如意的列表控件,细节不能错过,一般该怎么弄就怎么弄吧,

MVC

  1. 内容如何渲染?
  2. item 项
  3. url 标识

分页

1、一般分页,提示最后一页

2、触底自动加载(未实现)

3、更优秀的列表渲染算法,无须记录翻页(未实现)。

4、分页加载中提示(未实现)

图片

1、应该有一个可通过参数指定高宽的图片服务器。挑选适合的图片分辨率视网屏适应, 根据 window.devicePixelRatio 适应,代码拟定如下:

function getCellRequestWidth(){
	window.devicePixelRatio = window.devicePixelRatio || 1;
	
	var screenWidth = window.innerWidth; // 获取视口宽度  
	var columns = 3; // 列数,可双列或三列(取值:2|3),假设三列  
	
	var cellWidth = screenWidth * ( 1 / columns );// 求单元格实际宽度  
	var cellHight = cellWidth / (4 / 3); // 实际高度。此为横图,竖图为 8/9 
	var reqeustWidth = cellWidth * window.devicePixelRatio;
	reqeustWidth = Math.floor(reqeustWidth);
	var MaxWidth = 500;// 宽度上限
	return reqeustWidth;
}
2、加载背景图,图片未加载完成,在 placeholder 显示这是图片的位置

  • 设置 background-image(PNG 优化压缩、转换 Base64 合并在 HTML 中,已节省文件大小、HTTP 请求、优先加载)
  • 设置 <img /> 标签 alt 属性,会有加载提示文字

3、图片加载失败,替换为默认图片, onerr 事件。

4、Fx 特效,Fadeout 渐显,依次出现。使用 step.js 异步处理,十分好写!不过 iphone 好像还不能依次出现。

5、图片懒加载,结合分页。注意 onscroll 事件优化

6、怎么才能让图片不变形、等高等宽诸如此类的问题,着实是个大问题,而且不是三言两语可以讲清楚的,参考《非等宽图片列表的布局》

三、小结

有待补充,不吝赐教!

目录
相关文章
|
存储 资源调度 安全
H3C CAS系列 一、CAS初认识
对于虚拟化,可能第一时间大家想到的是虚拟机,而对于虚拟机大家可能第一时间想到的就是我们大多数人都可能比较熟悉的VMware系列产品,比如常用VMware Workstation Pro 、VMware esxi。 而今天我带大家一起认识一款我们国产的虚拟化软件 H3C CAS。
2036 0
|
5月前
|
机器学习/深度学习 人工智能 IDE
14B小模型代码成绩紧逼O3-Mini!DeepCoder-14B-Preview:基于Deepseek-R1蒸馏优化的开源代码生成模型
DeepCoder-14B-Preview是基于Deepseek-R1蒸馏优化的140亿参数模型,通过强化学习微调在LiveCodeBench达到60.6%准确率,开源训练数据与系统优化方案。
299 3
14B小模型代码成绩紧逼O3-Mini!DeepCoder-14B-Preview:基于Deepseek-R1蒸馏优化的开源代码生成模型
|
8月前
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
169 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
9月前
|
人工智能 算法 PyTorch
ATB是什么?
ATB加速库专为华为Ascend AI处理器设计,针对Transformer模型的训练和推理进行了深度优化。它通过算法、硬件和软件层面的优化,大幅提升模型性能,降低能耗与成本。ATB支持PyTorch、MindSpore等多种框架,提供高效的基础算子及图算子技术,适用于各种应用场景。其软件架构主要包括基础Operation、Plugin机制和Graph Frame三部分,通过优化算子计算和数据传输,实现性能的显著提升。
|
9月前
|
机器学习/深度学习 人工智能 安全
通义视觉推理大模型QVQ-72B-preview重磅上线
Qwen团队推出了新成员QVQ-72B-preview,这是一个专注于提升视觉推理能力的实验性研究模型。提升了视觉表示的效率和准确性。它在多模态评测集如MMMU、MathVista和MathVision上表现出色,尤其在数学推理任务中取得了显著进步。尽管如此,该模型仍存在一些局限性,仍在学习和完善中。
2008 51
|
JavaScript Java 测试技术
基于SpringBoot+Vue的学科竞赛管理系统附带文章和源代码
基于SpringBoot+Vue的学科竞赛管理系统附带文章和源代码
164 1
|
Ubuntu 应用服务中间件 Linux
Linux使用Nginx搭建图片服务器
Linux使用Nginx搭建图片服务器
408 0
|
前端开发 JavaScript API
用的前端框架都有什么
【8月更文挑战第26天】用的前端框架都有什么
937 2
|
Java Python Spring
spring boot读取resources目录下的python脚本执行
spring boot读取resources目录下的python脚本执行
1714 0
spring boot读取resources目录下的python脚本执行
|
数据采集 人工智能 大数据
颠覆传统编程模式,Python异步编程:探索asyncio库的魅力
在传统编程中,我们习惯使用同步方式处理任务,但随着互联网和移动应用的快速发展,对于高性能和高并发的需求也日益增加。Python异步编程通过引入异步IO库,如asyncio,为我们提供了一种全新的解决方案。本文将深入探讨Python异步编程的原理和使用方法,重点介绍asyncio库的特性与优势,并分享一些最佳实践,帮助读者更好地利用异步编程提升代码性能和效率。
154 1

热门文章

最新文章