更新记录

1.0.1(2025-08-01)

  1. 初次上传虚拟列表组件

平台兼容性

uni-app(4.75)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(4.75)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

下面是为你这段 uni-app 微信小程序虚拟滚动列表组件 <VirtualList /> 编写的一份Markdown 使用说明文档,结构清晰,适合放在项目 README 或 Wiki。


📦 VirtualList 虚拟列表组件

基于 uni-app + Vue 3 + UTS 开发的高性能虚拟滚动列表组件。 适用于微信小程序等移动端大数据列表场景,仅渲染可视区域,大幅减少节点数,提升性能。


✨ 功能特点

  • 支持超大数据量(例如 1 万条以上)平滑滚动
  • 自动计算缓冲区大小
  • 支持自定义单项高度
  • 提供 startIndexlist,方便自定义渲染
  • 使用 scroll-view 实现原生流畅滚动体验

🔧 属性(Props)

名称 类型 默认值 说明
listData Array 必填 列表数据源
itemHeight number 必填 单个 item 的高度(单位:px)
bufferSize number? 缓冲区行数(可选,不传则自动根据视口高度计算)

🧩 插槽(Slots)

名称 说明
default 渲染可视区域列表。作用域插槽参数:
- list: 当前需要渲染的可视数据数组
- startIndex: 当前可视区域的起始索引

📦 示例代码

下面示例演示如何使用 <VirtualList /> 渲染一个包含 1 万条数据的列表,每行高度 80px。

模板

<template>
  <VirtualList :listData="myList" :itemHeight="80">
    <template #default="{ list, startIndex }">
      <view v-for="(item, index) in list" :key="item.id">
        <view
          style="height: 80px; border-bottom: 1px solid #eee; display: flex; align-items: center; padding: 0 12px;">
          <text>{{ startIndex + index }} - {{ item.id }} - {{ item.name }}</text>
        </view>
      </view>
    </template>
  </VirtualList>
</template>

脚本

<script setup lang="uts">
const items = Array.from({ length: 10000 }, (_, i) => ({
  id: i + 1,
  name: `测试项 ${i + 1}`
}))

const myList = ref(items)
</script>

样式

<style scoped>
.item {
  height: 80px;
  border-bottom: 1px solid #eee;
  display: flex;
  align-items: center;
  padding: 0 12px;
}
</style>

📌 提示

itemHeight 必须与实际 item 高度保持一致,否则滚动错位 ✅ 大列表场景建议固定高度布局(如外层高度 100%) ✅ 可通过 bufferSize 手动调整缓冲区大小(更大更平滑,但占用内存更高)


⚙️ 内部工作机制

  • 根据 scrollTopitemHeight 计算当前可视区域
  • 根据视口高度动态决定缓冲区行数
  • 只渲染视口 + 缓冲区内的部分列表项
  • 通过 translateY 实现虚拟定位

📞 联系

如需定制或优化可留言或提 Issue ✏️


如果还想,我也可以帮你写一份更完整的 API 文档 + 源码注释中英双语版本,要的话直接告诉我! 🚀

隐私、权限声明

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

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

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

暂无用户评论。