index-en-US.md 6.5 KB


localeCode: en-US order: 57 category: Show title: ScrollList subTitle: ScrollList icon: doc-scrolllist

brief: Scroll through the list.

Demos

How to import

import { ScrollList, ScrollItem } from '@douyinfe/semi-ui';

Basic Usage

The scrolling list provides a scrolling selection mode similar to the IOS operating system, while supporting scrolling to the specified window location selection and click selection.

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: 'AM',
        }, {
            value: 'PM',
        }];

        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 (
            <Button size="small" type="primary" onClick={this.handleClose}>
                Ok
            </Button>
        );
    };

    render() {
        let list = this.list;
        const scrollStyle = {
            border: 'unset',
            boxShadow: 'unset',
        };
        return (
            <ScrollList style={scrollStyle} header={'Infinite Scroll List'} footer={this.renderFooter()}>
                <ScrollItem mode="wheel" cycled={false} list={this.ampms} type={1} selectedIndex={this.state.selectIndex1} onSelect={this.onSelectAP} />
                <ScrollItem mode="wheel" cycled={true} list={this.hours} type={2} selectedIndex={this.state.selectIndex2} onSelect={this.onSelectHour} />
                <ScrollItem mode="wheel" cycled={true} list={this.minutes} type={3} selectedIndex={this.state.selectIndex3} onSelect={this.onSelectMinute} />
            </ScrollList>
        );
    }
}

API Reference

ScrollList

Properties Instructions type Default
bodyHeight height of scroll list body number | string 300
className classname of wrapper string ''
footer Bottom addon ReactNode ''
header Head addon ReactNode ''
style inline style CSSProperties {}

ScrollItem

Properties Instructions type Default
cycled Whether it is an infinite loop, effective only if the mode is "wheel" boolean false
className classname of scroll item string ''
list List content Item Data[] []
motion Whether to start the scroll animation Motion true
onSelect Select callback (data: ItemData) => void NOOP
selectIndex Index of selected items number 0
style Inline style CSSProperties {}
transform For the Transformation of the selected item, the return value is displayed as a copy (value: any, text: string) => string v = > v

ItemData

Properties Instructions type Default
disabled Whether the item is prohibited or not boolean
text The copy of each item. string
transform When the transformation is in the selected state, the return value is displayed as a copy, and if the ScrollItem component is passed at the same time, the transform method in ItemData will be selected first. (value: any, text: string) => string v = > v
value The value of each item any

Accessibility

ARIA

  • ScrollItem support aria-label, indicates the label of current column.
  • ScrollItem uses aria-disabled to indicate whether the item is disabled
  • ScrollItem uses aria-selected to indicate whether the item is selected

Design Tokens