<list>
<list> 组件是一个高性能的可滚动容器,通过元素回收和懒加载机制优化性能和内存使用。它支持横向和纵向滚动,可实现单列、网格和瀑布流布局,非常适合无限滚动的信息流等应用场景。
使用指南
单列布局
1. 设置宽高:<list> 的宽高代表了其可视区域的大小,因此需要是确定的值,不能由内部内容撑开,只有在可视区域内可见的子节点才会被渲染。
2. 设置滚动方向与布局形式:设置属性 scroll-orientation 指定布局与滚动方向,设置 list-type 与 span-count 指定布局形式。
3. 配置子节点:使用标签 <list-item> 作为 <list> 直接子节点,并且给 <list-item> 设置 item-key 与 key,并且需要保持一致。

多列布局
1. 设置布局方式与列数: 设置布局形式 list-type 为 flow (网格布局) 或者 waterfall (瀑布流布局),并设置 span-count >= 2。
2. 多列布局下实现独占一行的子节点: 为 <list-item/> 设置 full-span 属性,可以使其在布局中独占一行或者一列。
网格布局案例:

瀑布流布局示例

List 相关 CSS 属性
List 相关 CSS 属性是专门为 <list> 组件设计的,例如 list-main-axis-gap 和 list-cross-axis-gap,可以对 <list> 内元素的布局和间距进行精细控制。需要注意的是,这些属性只在 <list> 上生效,在其他任何组件上都将被忽略。
list-main-axis-gap
指定了在主轴方向上,<list> 子节点的间距,需要写在 style 中。
list-cross-axis-gap
指定了在副轴方向上,<list> 子节点的间距,需要写在 style 中。
属性
list-type Required
控制 <list> 组件的布局类型,需要与 span-count 配合使用。
你可以通过查看多列布局指南 中的真实案例更清晰地看出 flow 和 waterfall 的布局差异。
span-count Required
设置 <list> 组件的布局列数或者行数。
scroll-orientation Required
设置 <list> 组件的滚动方向与布局方向。
item-key Required
item-key 是 <list-item> 上必须传入的属性。
开发者需要为每一个 <list> 子节点设置唯一的 item-key,其会被用来帮助 <list> 识别哪些 <list> 子节点已更改、添加或删除。因此开发者需要保证正确设置 item-key,如设置有误,将会导致错乱、闪动问题。
key Required
使用 key 属性来帮助框架识别哪些元件已更改、添加或删除。
在 list 场景下,key 和 item-key 保持一致。
enable-scroll
是否允许 <list> 组件滚动。
enable-nested-scroll
是否允许 <list> 与其他滚动容器实现嵌套滚动,开启后先滚动内层容器,再滚动外层容器。
sticky
声明在 <list> 组件上,控制 <list> 组件整体是否允许吸顶或者吸底。
sticky-offset
吸顶或者吸底位置距离 <list> 顶部或者底部的偏移,单位为 px。
sticky-top
声明在子节点 <list-item> 上,控制该节点是否会吸顶。
sticky-bottom
声明在子节点 <list-item> 上,控制该节点是否会吸底。
recyclable
声明在子节点 <list-item> 上,控制该节点是否会被回收,如果 recyclable 设置为 false,则 <list-item> 被滑出 <list> 可视区域后不会被回收。
bounces
开启边缘回弹效果。
initial-scroll-index
指定 <list> 在渲染后自动定位到的节点位置,仅首次生效。
need-visible-item-info
控制滚动事件回调参数中是否包含当前正在渲染节点的位置信息,这里滚动事件包含:scroll,scrolltoupper,scrolltolower。
滚动事件回调参数格式:
upper-threshold-item-count
当 <list> 顶部剩余可展示的子节点个数首次小于 upper-threshold-item-count 时,触发一次 scrolltoupper 事件。
lower-threshold-item-count
当 <list> 底部剩余可展示的子节点个数首次小于 lower-threshold-item-count 时,触发一次 scrolltolower 事件。
scroll-event-throttle
用于设置 <list> 回调 scroll 事件的时间间隔,单位为毫秒(ms)。其默认 200 ms 回调一次滚动事件。
当 engineVersion 版本小于 3.4,该属性无法生效,因此不会拦截 scroll 事件回调。当 engineVersion 版本大于等于 3.4,如果不设置改属性,则使用默认值 200 ms。
item-snap
控制 <list> 实现分页滚动的效果。
分页参数
factor: 分页定位锚定位置的参数,取值范围[0, 1]- 取值为
0代表分页滚动的<list>子节点和<list>顶部对齐 - 取值为
1代表分页滚动的<list>子节点和<list>底部对齐
- 取值为
offset: 额外增加偏移参数,在factor的基础之上再进一步添加偏移量
当 engineVersion 版本小于 3.2 时,列表滚动速率会存在不一致问题。
update-animation
该属性用于控制在数据源更新时,列表是否运行动画。当前支持插入、删除和更新动画。
![]() delete | ![]() update | ![]() insert |
当前 update-animation 只能在 list-type 为 single 或 flow 时生效。
need-layout-complete-info
控制 layoutcomplete 事件中是否包含本次 layout 前后的节点排版信息,触发本次排版的 <list> Diff 信息,以及当前 <list> 的滚动状态信息。
layout-id
用于标记本次数据源更新的唯一标识,会在 layoutcomplete 事件回调中返回这个 id。
preload-buffer-count
该属性可以控制 <list> 提前加载 <list> 外节点的个数。
-
preload-buffer-count的值越大,可以提前加载的屏外节点越多,但是也会增加<list>内存占用。 -
preload-buffer-count的取值建议为占满<list>一屏的节点个数。 -
仅
list-type='single'/'flow'时生效。
scroll-bar-enable
是否显示 <list> 组件滚动 条
harmony-scroll-edge-effect
在 Harmony 上,当 contentSize 小于自身容器大小,设置是否开启滑动效果。
reuse-identifier
设置 <list-item> 复用 id,<list> 组件在渲染子节点时,会根据 <list-item> 的 reuse-identifier 属性值对 <list-item> 进行复用,只有设置了相同的 reuse-identifier 属性值的 <list-item> 才会被复用。
默认情况下,开发者不提供需要 reuse-identifier,而是由框架在编译阶段确定,比如:当 <list-item> 处于循环内(例如 Array.prototype.map 等)时,由于它们在编译阶段的形态和位置相同,我们会为它们生成相同的 reuse-identifier,我们会认为这一组 <list-item> 可以互相复用。
使用场景:结构差异非常大的 <list-item> 在复用时性能比较差,因此建议为它们设置不同的 reuse-identifier,以避免它们之前被相互复用。
full-span
属性 full-span 用于标识 <list-item> 独占一行或者一列。
estimated-main-axis-size-px
用于指定 <list-item> 还未渲染完成时,在主轴方向上的占位大小,单位为 px,如果不设置,默认值为 <list> 在主轴方向上的大小。
强烈建议开发者设置与子节点真实大小相近的 estimated-main-axis-size-px。
experimental-recycle-sticky-item
<list> 中存在多个吸顶或者吸底的节点时,当吸顶或吸底的节点被其他吸顶或吸底的节点推出 <list> 区域后回收该节点,以解决吸顶或者吸底的节点过多导致的内存开销问题。此优化在 engineVersion 版本大于等于 3.4 时 默认开启。
![]() 吸顶的节点不回收, <list-item> 数量会不断增长 | ![]() 吸顶的节点回收, <list-item> 会被复用,数量不会增长 |
事 件
前端可以在元件上绑定相应事件回调来监听元件的运行时行为,使用方法如下。
scroll
<list> 滚动事件。
-
滚动事件触发频率可由
scroll-event-throttle控制。 -
如果
<list>开启need-visible-item-info,则回调参数中才会包含当前渲染子节点的位置信息。
scrolltoupper
滚动到 <list> 顶部时触发的回调。该回调触发的位置可以由 upper-threshold-item-count 控制。
scrolltolower
滚动到 <list> 底部时触发的回调。该回调触发的位置可以由 lower-threshold-item-count 控制。
scrollstatechange
<list> 滚动状态变化时触发的回调。事件参数的字段 detail 里的 state 分别取值: 1、2、3、4,分别 表示 <list> 滚动状态为:静止、拖拽、惯性滚动、动画滚动。
layoutcomplete
<list> 布局完成后触发回调。
snap
即将发生分页滚动时的回调。
方法
scrollToPosition
将 <list> 组件滚动到指定的位置,参数说明:
autoScroll
触发 <list> 自动滚动,参数说明:




