VirtualList 虚拟列表

虚拟列表,基于 VueUse useVirtualList 开发。

解决UseVirtualList组件使用动态列表不方便的问题(用户无法提前感知要渲染内容的宽高,所以不好传入到itemHeightitemWidth属性中)。

v1.0.8开始该组件滚动条支持ElScrollbar和原生滚动条

动态列表

组件指定高度,子内容超出则可滚动。

由于元素高度不确定,默认插槽内容在渲染之后或尺寸变化后会重新计算其真实高度进行修正,所以需使用item-size属性来对内容进行一个预估的高度(垂直)或宽度(水平)。

固定列表

理论上固定列表也是动态列表中的一种,只是其高度(宽度)是固定的,所以使用上述的使用姿势也没任何问题。

如果我们知道布局的高度(宽度)是固定的,建议使用固定列表,因为固定列表虚拟滚动,有更好的性能表现,且滚动条位置显示也是精准的。

使用item-fixed来开启固定列表,item-size是每一项的总高度或总宽度(盒模型宽高+padding+border+margin),所以默认插槽内容如含有margin-bottom属性,则需在size中减掉,没有则不用减

无限虚拟滚动

有时候可能希望虚拟列表也能作为普通列表来加载更多的数据项。

使用after插槽来后置一些内容。使用infinite-scroll函数来加载更多

Loading...

load 加载

为了使上面的使用姿势变得更加精简,可以使用load函数来加载更多数据,这样只需关心业务逻辑即可,不用操心loading error finished 的状态。

使用load函数需要返回promise实例,且promise的状态决定是loading还是error,使用finished属性来决定已全部加载完毕的状态。

API

属性

属性名说明类型默认值
list列表项Array-
item-fixed是否为固定列表Booleanfalse
item-size当为固定列表时,这个值表示默认插槽 UI 的总高度或共宽度;当为动态列表时,表示默认插槽 UI 总高度或共宽度的预估值Number-
overscan预渲染 DOM 节点的数量。如果滚动速度非常快,可以防止项目之间出现空白。Number10
direction水平还是垂直滚动Enumvertical
native-scrollbar是否使用原生滚动条Booleanfalse
infinite-scroll触底时触发的函数Function-
infinite-scroll-disabled禁用后触底时也不触发 infinite-scrollBooleanfalse
infinite-scroll-delay节流时延,单位为 msNumber16
infinite-scroll-distance触发加载的距离阈值,单位为 pxNumber20
load内容到达底部时触发加载的函数Function-
finished配合 load 使用,当数据加载完毕时,可以设置Booleanfalse
loading-text加载时的文案String加载中...
error-text加载异常的文案String请求失败,点击重新加载
no-more-text加载完的文案String没有更多了

Events

事件名说明类型
scroll容器滚动时触发Function

Slots

插槽名说明
before列表前置内容
after列表后置内容
loading加载时的内容
error加载异常的内容
finished加载完的内容

Exposes

名称详情类型
scrollTo滚动到Function

源代码

组件样式文档

贡献者