更新记录

0.1.13(2026-08-18) 下载此版本

  • 修复 scroll-view 标签属性区条件编译注释被解析为属性的隐患:@scrollend(仅鸿蒙/iOS)改为条件编译双分支渲染(注释移至标签外)

0.1.10(2026-08-14) 下载此版本

  • 精简 readme:移除内部开发向内容(设计说明 / 实现细节 / 平台差异实现等),只保留安装、用法、API、主题等用户文档

0.1.8(2026-08-07) 下载此版本

  • 修复 iOS 端滑动掉帧:onScroll 从每个 scroll 事件同步更新窗口改为 32ms 合并 + scrollend 强制同步(APP-IOS 复用鸿蒙机制,scroll/visible-changescrollend 同步触发),并在窗口中部滚动时跳过重建
  • 修复 iOS 端快速滑动下方空白:缓冲行数下限抬到 12(APP-IOS),scrollend 用最新 scrollTop 强制对齐窗口
  • Android、Web 和小程序行为保持不变
查看更多

平台兼容性

uni-app x(4.25)

Chrome Safari Android iOS 鸿蒙 微信小程序

其他

多语言 暗黑模式 宽屏模式
× ×

nax-virtual-list

固定行高虚拟列表。使用 scroll-view + 上下 spacer,只渲染可视区与缓冲行,适合一次性持有大量数据。

nax-list 的区别:nax-list 是滚动壳(内容自行 v-for,不裁剪 DOM);本组件接管数据源并做窗口裁剪。

能力

  • 固定 itemHeight:全端窗口裁剪
  • 作用域插槽自定义行:{ item, index }
  • 触底 load、下拉刷新、空 / 加载 / 结束 / 错误态(对齐 nax-list
  • 方法:scrollToIndex / scrollToOffset / getVisibleRange

用法

基础(大数据)

<nax-virtual-list
  height="480px"
  :list="list"
  :item-height="56"
  :buffer="8"
  key-field="id"
>
  <template #default="{ item, index }">
    <nax-cell :title="item.title" :value="'' + (index + 1)" is-link></nax-cell>
  </template>
</nax-virtual-list>
const list = ref([] as UTSJSONObject[])
// 一次性生成 / 从本地读入大量数据

触底加载更多

<nax-virtual-list
  height="480px"
  :list="list"
  :item-height="48"
  :loading="loading"
  :finished="finished"
  @load="onLoad"
>
  <template #default="{ item, index }">
    <nax-cell :title="item.title"></nax-cell>
  </template>
</nax-virtual-list>

滚动到指定行

// 模板 ref
const vlRef = ref(null)
// 调用
// vlRef.value!.scrollToIndex(500)

Props

属性 类型 默认 说明
list array [] 完整数据源
item-height number 48 行高 px(固定等高)
buffer number 6 上下缓冲行;鸿蒙不足 12 时抬到 12
key-field string '' 数据项业务 id(行 DOM 使用窗口位置 key)
height string '' 滚动区高度;空则 flex:1
show-scrollbar boolean true 滚动条
nested-scroll boolean false Android 端嵌套滚动:VDOM 外层需启用 type="nested" 并包裹 nested-scroll-body;蒸汽模式只需此属性;其它端无影响
loading / finished / error / empty boolean false 底栏 / 空态(受控)
disabled boolean false 禁用触底 load
offset number 80 触底阈值 px
enable-refresh boolean false 下拉刷新
refreshing boolean false 刷新中(受控)
loading-text / finished-text / error-text / empty-text / empty-icon string 中文默认 文案
custom-class string '' 根 class
item-class string '' 行容器 class

Events

事件 说明
load 触底需要加载更多
refresh 下拉刷新
update:refreshing 刷新态同步
click-error 点击错误区(随后仍发 load)
click 点击行 { index, item }
visible-change 可视窗口 { start, end }(半开区间 end)
scroll 滚动 { scrollTop, start, end }

Methods

方法 说明
scrollToIndex(index, animated?) 滚到索引(尽量置顶)
scrollToOffset(offsetY, animated?) 滚到 px 偏移
getVisibleRange() { start, end, scrollTop }
tryLoad() canLoad 时发 load

Slots

名称 说明
default 作用域 { item, index };未传时用 title/label/name/text 或 #index 兜底
header / footer 顶 / 底
empty / loading / finished / error 状态覆盖

主题

通过 CSS 变量覆盖:

Token 用途
--nax-color-bg 背景色
--nax-color-divider 分割线色
--nax-color-error 错误色
--nax-color-text 主文字色
--nax-color-text-secondary 次要文字色

依赖

  • nax-empty
  • nax-loading
  • nax-ui-theme(可选 token)

注意

  1. 必须等高:每行实际高度应等于 item-height,否则滚动定位会漂。
  2. 必须有明确高度:height 或父级 flex 高度链。
  3. 作用域插槽在部分端对类型较严,建议用 UTSJSONObject 取字段。
  4. 不做瀑布流 / 不等高测量。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。