---
id: "infinite-scroll"
title: "无限滚动 与 滚动条"
category: "容器组件"
document_type: "component-specification"
spec_status: "local-current-draft"
element_ui: "2.15.6"
vue: "2.6.14"
page: "../index.html#spec-infinite-scroll"
source_data: "../component-data.json"
official_components: ["infinite-scroll", "scrollbar"]
template_components: ["el-button", "el-scrollbar"]
scenario_count: 6
verification: "scenario-checklist-not-full-test-pass"
---

# 无限滚动 与 滚动条

专题 `infinite-scroll` · 容器组件 · Element UI 2.15.6

## 适用范围与组件映射

公共色板及字体基线适用于整个运营后台。本库整理基础组件、组件状态和可复用的组合模式；本轮补齐表单整体验证、页面布局和导航组合；具体业务字段与跨页流程仍在业务场景中说明。专题验收清单包含接入要求，不表示当前示例已实现或已验证全部场景。

官方条目映射：`infinite-scroll`、`scrollbar`。

本页模板直接使用的 Element UI 标签：`el-button`、`el-scrollbar`。

## 通用基线

- 组件库：Element UI **2.15.6**；运行样例 Vue **2.6.14**。
- 系统中文字体：macOS 优先苹方，Windows 通常微软雅黑；工程顺序固定为 `"PingFang SC", "Microsoft YaHei", sans-serif`。不要求安装或加载网络字体，兼容回退不是另一套可选样式。
- 后续仅采用经验证且固定版本的兼容 Element UI 2.x；Element Plus 属于独立迁移路线。
- 正文、数据值、输入及已选值：`14px / 400 / 21px`，`#303133`。
- 表头及组件分组标题：`14px / 600 / 21px`；弹窗标题：`16px / 600 / 24px`，均使用 `#303133`。
- 辅助说明：`12px / 400 / 18px`，`#595959`；错误、链接、状态、禁用与占位按各自语义处理。
- 适用组件的默认尺寸为 `small / 32px`；不得将这一高度机械应用于表格、文本域、浮层等全部组件。
- 规范正文与场景说明使用 `14px / 400 / 24px`、`#303133`，不降成灰蓝小字。
- 筛选文本输入占位统一“请输入”；未选择下拉统一“请选择”；默认全部的下拉显示“全部”。字段标签保留业务含义；日期保留开始/结束语义。
- 次级文字操作（查看更多、编辑、详情、数据中心、更多）：`12px / 400 / 18px`，`#3377BB`；保留点击热区。
- 本规范库的深色目录、蓝色展示区属于文档排版，不是业务组件颜色或业务导航规范。

## 本页用法与分类

默认用法：适合连续浏览的列表默认沿用当前“触底追加＋加载更多按钮”；需要精确定位和核对总数时优先分页。独立滚动容器只负责浏览已有内容。

| 区分什么 | 本页内容 | 选用或触发条件 |
| --- | --- | --- |
| 用途：追加数据或浏览已有内容 | 无限滚动改变已加载条数；滚动条只改变可见位置。 | 需要连续追加才用前者；内容已经齐备、只是超出容器高度时用后者。两者不是两种同级列表样式。 |
| 功能：追加触发条件 | 触发距离、首次触发和手动入口决定何时继续读取。 | 当前初始6条，触底或按钮每次追加4条，最多20条；保留按钮作为可访问替代入口。远端延迟和防并发需接入后实现。 |
| 统一滚动条 | 原生或自定义是组件实现方式，不是两套可选视觉。 | 本页两处竖向条均为6px、浅灰轨道和边框灰滑块；同方向只保留一套可拖动轨道。内容超出才滚动，不能显示重复或无用横向条。 |
| 自动状态：加载、失败与末尾 | 这些状态由请求及剩余数据决定，不能自由选择。 | 有请求才显示加载；失败保留已有内容并提供重试；无剩余数据才显示没有更多。当前仅本地追加与末尾，不含真实失败或重试。 |

使用边界：不把独立滚动条当作另一种自动加载方案。不把没有更多、加载中与失败当作可配置外观。

## 组件规则

- **INFINITE-SCROLL-R01**：无限滚动只用于适合连续浏览、需要继续追加数据的列表，默认保留触底追加与加载更多按钮；需要精确定位和总量核对的数据优先分页。独立滚动容器只浏览已有内容，不是另一种无限加载样式。
- **INFINITE-SCROLL-R02**：覆盖首次加载、继续加载、加载失败、没有更多；并发请求去重，保留滚动位置。
- **INFINITE-SCROLL-R03**：必须提供可访问的继续加载替代入口；以下本地样例同时支持滚动和加载更多，不连接接口。
- **INFINITE-SCROLL-R04**：【公共用色】颜色仅从公共色值 引用：主色系 3 个基础色值、辅助功能色 3 个、中性色 10 个，共 16 个基础色值。角色可以多个，实际色值复用；不为每个组件、悬停 或不同字段再新增近似颜色。透明效果仅限遮罩 35% 与阴影 12%，从 外壳深色 派生。
- **INFINITE-SCROLL-R05**：【统一字体】统一系统中文字体：macOS 优先苹方（PingFang SC），Windows 通常使用微软雅黑（Microsoft YaHei）；工程顺序固定为 "PingFang SC", "Microsoft YaHei", sans-serif。使用设备已有字体，不要求安装或加载网络字体；最后一项仅作兼容回退，不是供页面作者任选的另一套样式。正文 14px/400/21px；表头与分组标题 14px/600/21px，弹窗标题 16px/600/24px；次级文字操作和辅助说明 12px/400/18px。正文与标题同用 #303133；不通过额外加粗或透明度改变正文轻重。
- **INFINITE-SCROLL-R06**：【叠加优先级】状态叠加规则：禁用阻断交互；输入类控件错误边框覆盖蓝色聚焦边框；输入框不叠加外圈或阴影，其他无边框操作保留键盘焦点提示；选中底覆盖悬停底；只读不等于禁用；加载不等于成功；业务启用/停用的文字结果不等于控件是否可点击。
- **INFINITE-SCROLL-R07**：【内容与滚动条】内容白底、正文深灰；独立竖向滚动条统一6px，轨道浅灰背景、滑块边框灰，悬停滑块用辅助深灰。同一方向只显示一套滚动条，滚动不改变正文颜色。
- **INFINITE-SCROLL-R08**：【继续加载】仅请求下一批时显示主题蓝图标与正文深灰说明；保留已加载内容，不重复提交请求。
- **INFINITE-SCROLL-R09**：【末尾与空列表】全部加载完成或没有内容时给空值灰/辅助深灰说明；“到底了”不使用成功绿冒充操作完成。
- **INFINITE-SCROLL-R10**：【失败与重试】失败错误红短提示，重试入口操作蓝并有焦点；不把滚动容器整体染红或禁用。
- **INFINITE-SCROLL-R11**：【组件边界】无限滚动没有展开箭头或容器选中态；滚动条位置只表示滚动位置，不表示业务步骤成功。

## 场景与验收清单

以下为需核对的场景组；`[ ]` 不代表已经测试通过。

- [ ] **INFINITE-SCROLL-S01**：当前样例：6条起始内容，每次触底或点加载更多追加4条，最多20条；到达末尾后禁止继续增加。
- [ ] **INFINITE-SCROLL-S02**：当前样例：连续加载容器使用原生6px竖向条，独立滚动容器保留Element自定义6px竖向条并隐藏重复原生轨道。滚轮、拖动滑块都应到首尾，最后一条完整可见；普通文本换行，内容仍可滚动，不能用禁止滚动掩盖问题。
- [ ] **INFINITE-SCROLL-S03**：接入验收：先确定触发距离、首次触发和请求延迟等功能配置，再验证防重复请求、下一批加载/失败/重试与已加载数据保留；请求状态不能作为可任选的样式。
- [ ] **INFINITE-SCROLL-S04**：大量数据性能与虚拟化另行验收，不能由20条本地演示推断通过。
- [ ] **INFINITE-SCROLL-S05**：共用视觉验收：仅核对本组件实际适用的颜色与组合状态；无此能力标为不适用，不给静态内容添加输入错误、半选或按下状态。
- [ ] **INFINITE-SCROLL-S06**：共用文字验收：正文14px/400、次级操作12px/400、标题600；检查实际子元素与弹出层。输入焦点只改自身边框，按钮和链接保留键盘焦点轮廓。

### 专题验收重点

当前核对触底或按钮追加到最多20条、末尾停止追加；两处竖向滚动条均为6px，滚轮与拖拽都能到首尾，无原生与自定义轨道叠加、无多余横向条。真实请求失败/重试、并发控制、大数据性能及虚拟化另行接入验收。

## 当前示例模板

以下来自本专题的结构化示例，使用 Vue 2 模板语法。`v-model`、事件方法、数据列表等依赖 [components.js](../components.js)；完整样式文件及加载顺序见 [通用基线](FOUNDATIONS.md)。自定义组合标签的内部实现由下方依赖文件提供，不能仅复制标签作为完整组件。

```html
<h4>连续加载列表</h4>
<div class="infinite-box" tabindex="0" role="region" aria-label="可滚动的连续加载列表" v-infinite-scroll="loadMore" :infinite-scroll-disabled="infiniteCount >= 20" :infinite-scroll-immediate="false">
<div v-for="n in infiniteCount" :key="n">示例条目 {{ n }}</div>
</div>
<el-button @click="loadMore" :disabled="infiniteCount >= 20">{{ infiniteCount >= 20 ? '没有更多' : '加载更多' }}</el-button>
<h4>独立滚动容器</h4>
<el-scrollbar class="scrollbar-sample" tabindex="0" role="region" aria-label="独立滚动条样例">
<p v-for="n in 12" :key="n">滚动条内容 {{n}}</p>
</el-scrollbar>
```

## 交付与使用边界

- 规范条款、示例代码与待验收场景分开理解；有示例不等于已覆盖所有样式、交互状态和使用场景。
- 业务接口、权限、时区、金额精度、数据规模等依赖应从实际项目读取，不使用演示值代替生产约定。
- 发生样式或文案变更时，同步专题数据、页面与 Markdown，避免规范和样例分离。

## 来源与关联

- 来源线索：本次补充。
- [打开本专题页面](../index.html#spec-infinite-scroll)
- [通用基线](FOUNDATIONS.md)
- [规范总索引](README.md)
- [结构化规范数据](../component-data.json)（记录 id：`infinite-scroll`）
- [原始历史样板](../original-20260621.html)
- [历史规范条目](../spec-notes.json)

## 本组件颜色状态表

| 状态 / 条件 | 统一规则 |
| --- | --- |
| 内容与滚动条 | 内容白底、正文深灰；独立竖向滚动条统一6px，轨道浅灰背景、滑块边框灰，悬停滑块用辅助深灰。同一方向只显示一套滚动条，滚动不改变正文颜色。 |
| 继续加载 | 仅请求下一批时显示主题蓝图标与正文深灰说明；保留已加载内容，不重复提交请求。 |
| 末尾与空列表 | 全部加载完成或没有内容时给空值灰/辅助深灰说明；“到底了”不使用成功绿冒充操作完成。 |
| 失败与重试 | 失败错误红短提示，重试入口操作蓝并有焦点；不把滚动容器整体染红或禁用。 |

无限滚动没有展开箭头或容器选中态；滚动条位置只表示滚动位置，不表示业务步骤成功。

[公共颜色与字体 token](../color-tokens.json) · [公共组件样式](../color-contract.css) · [系统字体合同（最后加载）](../font-contract.css)

## 业务落地场景

- [客服工单管理 · 处理记录 · 独立滚动](../../showcase/index.html?example=ticket-history#tickets) · [场景文档](../../showcase/docs/tickets.md)；落地范围：只覆盖独立滚动容器，不覆盖触底追加数据。

[竞品组件拆解](../../reference-review/竞品组件反推规范.html) · [业务场景分类](../../业务场景分类清单.md)
