---
localeCode: zh-CN
order: 59
category: 展示类
title: ScrollList 滚动列表
icon: doc-scrolllist
brief: 滚动列表。
---
## 代码演示
### 如何引入
```jsx import
import { ScrollList, ScrollItem } from '@douyinfe/semi-ui';
```
### 基本使用
滚动列表提供了一个类似于 iOS 操作系统的滚动选择模式,同时支持滚动至指定窗口位置选择与点击选择。
```jsx live=true
import React from 'react';
import { ScrollList, ScrollItem, Button } from '@douyinfe/semi-ui';
class ScrollListDemo extends React.Component {
constructor(props) {
super(props);
this.state = {
selectIndex1: 1,
selectIndex2: 1,
selectIndex3: 1,
};
this.ampms = [
{
value: '上午',
},
{
value: '下午',
},
];
this.hours = new Array(12).fill(0).map((itm, index) => {
return {
value: index + 1,
};
});
this.minutes = new Array(60).fill(0).map((itm, index) => {
return {
value: index,
disabled: Math.random() > 0.5 ? true : false,
};
});
this.onSelectAP = this.onSelectAP.bind(this);
this.onSelectHour = this.onSelectHour.bind(this);
this.onSelectMinute = this.onSelectMinute.bind(this);
this.handleClose = this.handleClose.bind(this);
this.renderFooter = this.renderFooter.bind(this);
}
onSelectAP(data) {
this.setState({
['selectIndex' + data.type]: data.index,
});
}
onSelectHour(data) {
console.log('You have choose the hour for: ', data.value);
this.setState({
['selectIndex' + data.type]: data.index,
});
}
onSelectMinute(data) {
console.log('You have choose the minute for: ', data.value);
this.setState({
['selectIndex' + data.type]: data.index,
});
}
handleClose() {
console.log('close');
}
renderFooter() {
return (
);
}
render() {
let list = this.list;
const scrollStyle = {
border: 'unset',
boxShadow: 'unset',
};
return (
);
}
}
```
## API 参考
### ScrollList
| 属性 | 说明 | 类型 | 默认值 |
| ------ | ---------- | ------ | ------ |
| bodyHeight | body高度 | string \| number | |
| className | 样式类名 | string | '' |
| footer | 底部 addon | ReactNode | '' |
| header | 头部 addon | ReactNode | '' |
| style | 内联样式 | CSSProperties | {} |
### ScrollItem
| 属性 | 说明 | 类型 | 默认值 |
| ----------- | ------------------------------------------- | ----------------------- | ------ |
| className | 样式类名 | string | '' |
| cycled | 是否为无限循环,仅在 mode 为 "wheel" 时生效 | boolean | false |
| list | 列表内容 | [ItemData](#ItemData)[] | [] |
| motion | 是否开启滚动动画 | Motion | true |
| onSelect | 选中回调 | (data: [ItemData](#ItemData)) => void | NOOP |
| selectIndex | 选中项的索引 | number | 0 |
| style | 内联样式 | CSSProperties | {} |
| transform | 对选中项的变换,返回值会作为文案进行显示 | (value: any, text: string) => string | v => v |
#### ItemData
| 属性 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| disabled | 该项是否被禁止选择 | boolean | |
| text | 每一项的文案 | string | |
| transform | 该项处于选中状态时的变换,返回值会作为文案进行显示,ScrollItem 组件如果同时传入会优先选择 ItemData 中的 transform 方法 | (value: any, text: string) => string | v => v |
| value | 每一项的值 | any | |
## Accessibility
### ARIA
- `ScrollItem` 支持传入 `aria-label`, 指定该列标签
- `ScrollItem` 使用 `aria-disabled` 表示该项目是否被禁用
- `ScrollItem` 使用 `aria-selected` 表示该项目是否被选中
## 设计变量