Slider 滑动输入条

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

何时使用

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

代码演示

基本

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

Slider滑动输入条 - 图1

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

带输入框的滑块

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

Slider滑动输入条 - 图2

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Slider, InputNumber, Row, Col } from 'choerodon-ui';
  4. class IntegerStep extends React.Component {
  5. state = {
  6. inputValue: 1,
  7. }
  8. onChange = (value) => {
  9. this.setState({
  10. inputValue: value,
  11. });
  12. }
  13. render() {
  14. return (
  15. <Row>
  16. <Col span={12}>
  17. <Slider min={1} max={20} onChange={this.onChange} value={this.state.inputValue} />
  18. </Col>
  19. <Col span={4}>
  20. <InputNumber
  21. min={1}
  22. max={20}
  23. style={{ marginLeft: 16 }}
  24. value={this.state.inputValue}
  25. onChange={this.onChange}
  26. />
  27. </Col>
  28. </Row>
  29. );

带 icon 的滑块

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

Slider滑动输入条 - 图3

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Slider, Icon } from 'choerodon-ui';
  4. class IconSlider extends React.Component {
  5. state = {
  6. value: 0,
  7. }
  8. handleChange = (value) => {
  9. this.setState({ value });
  10. }
  11. render() {
  12. const { max, min } = this.props;
  13. const { value } = this.state;
  14. const mid = ((max - min) / 2).toFixed(5);
  15. const preColor = value >= mid ? '' : 'rgba(0, 0, 0, .45)';
  16. const nextColor = value >= mid ? 'rgba(0, 0, 0, .45)' : '';
  17. return (
  18. <div className="icon-wrapper">
  19. <Icon style={{ color: preColor }} type="frown-o" />
  20. <Slider {...this.props} onChange={this.handleChange} value={value} />
  21. <Icon style={{ color: nextColor }} type="smile-o" />
  22. </div>
  23. );
  24. }
  25. }
  26. ReactDOM.render(<IconSlider min={0} max={20} />, document.getElementById('container'));

自定义提示

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

Slider滑动输入条 - 图4

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Slider } from 'choerodon-ui';
  4. function formatter(value) {
  5. return `${value}%`;
  6. }
  7. ReactDOM.render(
  8. <div>
  9. <Slider tipFormatter={formatter} />
  10. <Slider tipFormatter={null} />
  11. </div>,
  12. document.getElementById('container'),
  13. );

事件

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

Slider滑动输入条 - 图5

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

带标签的滑块

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

Slider滑动输入条 - 图6

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

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

方法

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