• Slider滑动输入条
    • 何时使用
    • 代码演示
    • API
    • 方法

    Slider滑动输入条

    滑动型输入器,展示当前值和可选范围。

    何时使用

    当用户需要在数值区间/自定义区间内进行选择时,可为连续或离散值。

    代码演示

    Slider 滑动输入条 - 图1

    基本

    基本滑动条。当 rangetrue 时,渲染为双滑块。当 disabledtrue 时,滑块处于不可用状态。

    1. import { Slider, Switch } from 'antd';
    2. class Demo extends React.Component {
    3. state = {
    4. disabled: false,
    5. };
    6. handleDisabledChange = disabled => {
    7. this.setState({ disabled });
    8. };
    9. render() {
    10. const { disabled } = this.state;
    11. return (
    12. <div>
    13. <Slider defaultValue={30} disabled={disabled} />
    14. <Slider range defaultValue={[20, 50]} disabled={disabled} />
    15. Disabled: <Switch size="small" checked={disabled} onChange={this.handleDisabledChange} />
    16. </div>
    17. );
    18. }
    19. }
    20. ReactDOM.render(<Demo />, mountNode);

    Slider 滑动输入条 - 图2

    带 icon 的滑块

    滑块左右可以设置图标来表达业务含义。

    1. import { Slider, Icon } from 'antd';
    2. class IconSlider extends React.Component {
    3. state = {
    4. value: 0,
    5. };
    6. handleChange = value => {
    7. this.setState({ value });
    8. };
    9. render() {
    10. const { max, min } = this.props;
    11. const { value } = this.state;
    12. const mid = ((max - min) / 2).toFixed(5);
    13. const preColor = value >= mid ? '' : 'rgba(0, 0, 0, .45)';
    14. const nextColor = value >= mid ? 'rgba(0, 0, 0, .45)' : '';
    15. return (
    16. <div className="icon-wrapper">
    17. <Icon style={{ color: preColor }} type="frown-o" />
    18. <Slider {...this.props} onChange={this.handleChange} value={value} />
    19. <Icon style={{ color: nextColor }} type="smile-o" />
    20. </div>
    21. );
    22. }
    23. }
    24. ReactDOM.render(<IconSlider min={0} max={20} />, mountNode);
    1. .icon-wrapper {
    2. position: relative;
    3. padding: 0px 30px;
    4. }
    5. .icon-wrapper .anticon {
    6. position: absolute;
    7. top: -2px;
    8. width: 16px;
    9. height: 16px;
    10. line-height: 1;
    11. font-size: 16px;
    12. color: rgba(0, 0, 0, 0.25);
    13. }
    14. .icon-wrapper .anticon:first-child {
    15. left: 0;
    16. }
    17. .icon-wrapper .anticon:last-child {
    18. right: 0;
    19. }

    Slider 滑动输入条 - 图3

    事件

    当 Slider 的值发生改变时,会触发 onChange 事件,并把改变后的值作为参数传入。在 onmouseup 时,会触发 onAfterChange 事件,并把当前值作为参数传入。

    1. import { Slider } from 'antd';
    2. function onChange(value) {
    3. console.log('onChange: ', value);
    4. }
    5. function onAfterChange(value) {
    6. console.log('onAfterChange: ', value);
    7. }
    8. ReactDOM.render(
    9. <div>
    10. <Slider defaultValue={30} onChange={onChange} onAfterChange={onAfterChange} />
    11. <Slider
    12. range
    13. step={10}
    14. defaultValue={[20, 50]}
    15. onChange={onChange}
    16. onAfterChange={onAfterChange}
    17. />
    18. </div>,
    19. mountNode,
    20. );

    Slider 滑动输入条 - 图4

    垂直

    垂直方向的 Slider。

    1. import { Slider } from 'antd';
    2. const style = {
    3. float: 'left',
    4. height: 300,
    5. marginLeft: 70,
    6. };
    7. const marks = {
    8. 0: '0°C',
    9. 26: '26°C',
    10. 37: '37°C',
    11. 100: {
    12. style: {
    13. color: '#f50',
    14. },
    15. label: <strong>100°C</strong>,
    16. },
    17. };
    18. ReactDOM.render(
    19. <div style={{ height: 300 }}>
    20. <div style={style}>
    21. <Slider vertical defaultValue={30} />
    22. </div>
    23. <div style={style}>
    24. <Slider vertical range step={10} defaultValue={[20, 50]} />
    25. </div>
    26. <div style={style}>
    27. <Slider vertical range marks={marks} defaultValue={[26, 37]} />
    28. </div>
    29. </div>,
    30. mountNode,
    31. );

    Slider 滑动输入条 - 图5

    带输入框的滑块

    和 数字输入框 组件保持同步。

    1. import { Slider, InputNumber, Row, Col } from 'antd';
    2. class IntegerStep extends React.Component {
    3. state = {
    4. inputValue: 1,
    5. };
    6. onChange = value => {
    7. this.setState({
    8. inputValue: value,
    9. });
    10. };
    11. render() {
    12. const { inputValue } = this.state;
    13. return (
    14. <Row>
    15. <Col span={12}>
    16. <Slider
    17. min={1}
    18. max={20}
    19. onChange={this.onChange}
    20. value={typeof inputValue === 'number' ? inputValue : 0}
    21. />
    22. </Col>
    23. <Col span={4}>
    24. <InputNumber
    25. min={1}
    26. max={20}
    27. style={{ marginLeft: 16 }}
    28. value={inputValue}
    29. onChange={this.onChange}
    30. />
    31. </Col>
    32. </Row>
    33. );
    34. }
    35. }
    36. class DecimalStep extends React.Component {
    37. state = {
    38. inputValue: 0,
    39. };
    40. onChange = value => {
    41. if (Number.isNaN(value)) {
    42. return;
    43. }
    44. this.setState({
    45. inputValue: value,
    46. });
    47. };
    48. render() {
    49. const { inputValue } = this.state;
    50. return (
    51. <Row>
    52. <Col span={12}>
    53. <Slider
    54. min={0}
    55. max={1}
    56. onChange={this.onChange}
    57. value={typeof inputValue === 'number' ? inputValue : 0}
    58. step={0.01}
    59. />
    60. </Col>
    61. <Col span={4}>
    62. <InputNumber
    63. min={0}
    64. max={1}
    65. style={{ marginLeft: 16 }}
    66. step={0.01}
    67. value={inputValue}
    68. onChange={this.onChange}
    69. />
    70. </Col>
    71. </Row>
    72. );
    73. }
    74. }
    75. ReactDOM.render(
    76. <div>
    77. <IntegerStep />
    78. <DecimalStep />
    79. </div>,
    80. mountNode,
    81. );

    Slider 滑动输入条 - 图6

    自定义提示

    使用 tipFormatter 可以格式化 Tooltip 的内容,设置 tipFormatter={null},则隐藏 Tooltip

    1. import { Slider } from 'antd';
    2. function formatter(value) {
    3. return `${value}%`;
    4. }
    5. ReactDOM.render(
    6. <div>
    7. <Slider tipFormatter={formatter} />
    8. <Slider tipFormatter={null} />
    9. </div>,
    10. mountNode,
    11. );

    Slider 滑动输入条 - 图7

    带标签的滑块

    使用 marks 属性标注分段式滑块,使用 value / defaultValue 指定滑块位置。当 included=false 时,表明不同标记间为并列关系。当 step=null 时,Slider 的可选值仅有 marks 标出来的部分。

    1. import { Slider } from 'antd';
    2. const marks = {
    3. 0: '0°C',
    4. 26: '26°C',
    5. 37: '37°C',
    6. 100: {
    7. style: {
    8. color: '#f50',
    9. },
    10. label: <strong>100°C</strong>,
    11. },
    12. };
    13. ReactDOM.render(
    14. <div>
    15. <h4>included=true</h4>
    16. <Slider marks={marks} defaultValue={37} />
    17. <Slider range marks={marks} defaultValue={[26, 37]} />
    18. <h4>included=false</h4>
    19. <Slider marks={marks} included={false} defaultValue={37} />
    20. <h4>marks & step</h4>
    21. <Slider marks={marks} step={10} defaultValue={37} />
    22. <h4>step=null</h4>
    23. <Slider marks={marks} step={null} defaultValue={37} />
    24. </div>,
    25. mountNode,
    26. );

    Slider 滑动输入条 - 图8

    控制 ToolTip 的显示

    tooltipVisibletrue 时,将始终显示 ToolTip;反之则始终不显示,即使在拖动、移入时也是如此。

    1. import { Slider } from 'antd';
    2. ReactDOM.render(<Slider defaultValue={30} tooltipVisible />, mountNode);

    API

    参数说明类型默认值
    allowClear支持清除, 单选模式有效booleanfalse
    defaultValue设置初始取值。当 rangefalse 时,使用 number,否则用 [number, number]number|number[]0 or [0, 0]
    disabled值为 true 时,滑块为禁用状态booleanfalse
    dots是否只能拖拽到刻度上booleanfalse
    includedmarks 不为空对象时有效,值为 true 时表示值为包含关系,false 表示并列booleantrue
    marks刻度标记,key 的类型必须为 number 且取值在闭区间 [min, max] 内,每个标签可以单独设置样式object{ number: string|ReactNode } or { number: { style: object, label: string|ReactNode } }
    max最大值number100
    min最小值number0
    range双滑块模式booleanfalse
    step步长,取值必须大于 0,并且可被 (max - min) 整除。当 marks 不为空对象时,可以设置 stepnull,此时 Slider 的可选值仅有 marks 标出来的部分。number|null1
    tipFormatterSlider 会把当前值传给 tipFormatter,并在 Tooltip 中显示 tipFormatter 的返回值,若为 null,则隐藏 Tooltip。Function|nullIDENTITY
    value设置当前取值。当 rangefalse 时,使用 number,否则用 [number, number]number|number[]
    vertical值为 true 时,Slider 为垂直方向Booleanfalse
    onAfterChangeonmouseup 触发时机一致,把当前值作为参数传入。Function(value)NOOP
    onChange当 Slider 的值发生改变时,会触发 onChange 事件,并把改变后的值作为参数传入。Function(value)NOOP
    tooltipVisible值为true时,Tooltip 将会始终显示;否则始终不显示,哪怕在拖拽及移入时。Boolean

    方法

    名称描述
    blur()移除焦点
    focus()获取焦点