代码演示
如何引入
import { ScrollList, ScrollItem } from '@douyinfe/semi-ui';
基本使用
滚动列表提供了一个类似于 iOS 操作系统的滚动选择模式,同时支持滚动至指定窗口位置选择与点击选择。
import React, { useState } from 'react';
import { ScrollList, ScrollItem, Button } from '@douyinfe/semi-ui';
() => {
const [selectIndex1, setSelectIndex1] = useState(1);
const [selectIndex2, setSelectIndex2] = useState(1);
const [selectIndex3, setSelectIndex3] = useState(1);
const ampms = [
{
value: '上午',
},
{
value: '下午',
},
];
const hours = new Array(12).fill(0).map((itm, index) => {
return {
value: index + 1,
};
});
const minutes = new Array(60).fill(0).map((itm, index) => {
return {
value: index,
disabled: Math.random() > 0.5 ? true : false,
};
});
const onSelectAP = (data) => {
if (data.type === 1) {
setSelectIndex1(data.index);
}
};
const onSelectHour = (data) => {
console.log('You have choose the hour for: ', data.value);
if (data.type === 2) {
setSelectIndex2(data.index);
}
};
const onSelectMinute = (data) => {
console.log('You have choose the minute for: ', data.value);
if (data.type === 3) {
setSelectIndex3(data.index);
}
};
const handleClose = () => {
console.log('close');
};
const renderFooter = () => {
return (
<Button size="small" type="primary" onClick={handleClose}>
Ok
</Button>
);
};
const scrollStyle = {
border: 'unset',
boxShadow: 'unset',
};
return (
<ScrollList style={scrollStyle} header={'无限滚动列表'} footer={renderFooter()}>
<ScrollItem
mode="wheel"
cycled={false}
list={ampms}
type={1}
selectedIndex={selectIndex1}
onSelect={onSelectAP}
/>
<ScrollItem
mode="wheel"
cycled={true}
list={hours}
type={2}
selectedIndex={selectIndex2}
onSelect={onSelectHour}
/>
<ScrollItem
mode="wheel"
cycled={true}
list={minutes}
type={3}
selectedIndex={selectIndex3}
onSelect={onSelectMinute}
/>
</ScrollList>
);
};
API 参考
| 属性 | 说明 | 类型 | 默认值 |
|---|
| bodyHeight | body高度 | string | number | |
| className | 样式类名 | string | '' |
| footer | 底部 addon | ReactNode | '' |
| header | 头部 addon | ReactNode | '' |
| style | 内联样式 | CSSProperties | {} |
| 属性 | 说明 | 类型 | 默认值 |
|---|
| className | 样式类名 | string | '' |
| cycled | 是否为无限循环,仅在 mode 为 "wheel" 时生效 | boolean | false |
| list | 列表内容 | ItemData[] | [] |
| mode | 模式选择 | "normal" | "wheel" | "wheel" |
| motion | 是否开启滚动动画 | Motion | true |
| onSelect | 选中回调 | (data: ItemData) => void | NOOP |
| selectedIndex | 选中项的索引 | 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 表示该项目是否被选中