# Scroll 滚动组件 API 文档 本文档由 `DeepSeek R1` 模型生成并微调。 ## 组件特性 - **虚拟滚动**:自动裁剪可视区域外元素 - **双模式支持**:垂直/水平滚动(默认垂直) - **性能优化**:动态计算可视区域,支持万级元素流畅滚动 - **编程控制**:支持精准定位滚动位置 --- ## Props 属性说明 | 属性名 | 类型 | 默认值 | 描述 | | ---------- | ---------------- | ------- | ------------------------------------------------- | | `hor` | `boolean` | `false` | 启用水平滚动模式 | | `noscroll` | `boolean` | `false` | 是否不显示滚动条,可用于一些特殊场景 | | `loc` | `ElementLocator` | 必填 | 滚动容器定位配置 | | `padEnd` | `number` | `0` | 滚动到底部/右侧的额外留白(用于修正自动计算误差) | --- ## Exposed Methods 暴露方法 | 方法名 | 参数 | 返回值 | 描述 | | ----------------- | --------------------------------- | -------- | --------------------------------------------------- | | `scrollTo` | `position: number, time?: number` | `void` | 滚动到指定位置(单位:像素),time 为过渡时间(ms) | | `getScrollLength` | - | `number` | 获取最大可滚动距离(单位:像素) | --- ## Slots 插槽说明 ### `default` 接收滚动内容,**必须直接包含可渲染元素** ⚠️ 禁止嵌套 container 包裹,推荐平铺结构: ```tsx // ✅ 正确写法 ; // ❌ 错误写法(影响虚拟滚动计算) // 会导致整体被视为单个元素 ; ``` --- ## 使用示例 ### 基础垂直滚动 ```tsx import { defineComponent } from 'vue'; export const MyCom = defineComponent(() => { const list = Array(200).fill(0); return () => ( {list.map((_, index) => ( ))} ); }); ``` ### 水平滚动 + 编程控制 ```tsx import { defineComponent, ref, onMounted } from 'vue'; export const MyCom = defineComponent(() => { const list = Array(200).fill(0); const scrollRef = ref(); // 滚动水平 100 像素位置,动画时长 500 毫秒 onMounted(() => { scrollRef.value?.scrollTo(100, 500); }); return () => ( {list.map((_, index) => ( ))} ); }); ``` --- ## 性能优化指南 ### 1. 替代方案建议 ⚠️ **当子元素数量 > 1000 时**,推荐改用分页组件: ```tsx // 使用 Page 组件处理超大数据集 {page => renderChunk(data.slice(page * 50, (page + 1) * 50))} ```