Slider 滑动输入控件

<Slider> 滑动输入控件。

<RangeSlider> 滑动范围输入控件。

获取组件

import { Slider, RangeSlider } from 'rsuite';

演示

默认

显示进度条

显示刻度

垂直滑动

export const VerticalSlider = () => {
  const style = {
    height: 400
  };
  return (
    <div >
      <Row>
        <Col md={2}>
          <div style={style}>
            <Slider defaultValue={50} vertical />
          </div>
        </Col>

        <Col md={2}>
          <div style={style}>
            <Slider defaultValue={50} vertical progress />
          </div>
        </Col>
        <Col md={2}>
          <div style={style}>
            <RangeSlider defaultValue={[10, 50]} vertical />
          </div>
        </Col>
        <Col md={2}>
          <div style={style}>
            <Slider
              defaultValue={50}
              min={0}
              step={10}
              max={100}
              graduated
              vertical
              progress
            />
          </div>
        </Col>
        <Col md={2}>
          <div style={style}>
            <RangeSlider
              min={0}
              step={10}
              max={100}
              defaultValue={[10, 50]}
              vertical
              graduated
            />
          </div>
        </Col>
        <Col md={2}>
          <div style={style}>
            <Slider
              defaultValue={50}
              min={0}
              step={10}
              max={100}
              graduated
              vertical
              progress
              renderMark={mark => {
                return <span>{mark} °C</span>;
              }}
            />
          </div>
        </Col>
      </Row>
    </div>
  );
};
ReactDOM.render(<VerticalSlider />);

禁用

显示值(受控的)

function Example1() {
  const [value, setValue] = React.useState(0);
  return (
    <Row>
      <Col md={10}>
        <Slider
          progress
          style={{ marginTop: 16 }}
          value={value}
          onChange={value => {
            setValue(value);
          }}
        />
      </Col>
      <Col md={4}>
        <InputNumber
          min={0}
          max={100}
          value={value}
          onChange={value => {
            setValue(value);
          }}
        />
      </Col>
    </Row>
  );
}

function Example2() {
  const [value, setValue] = React.useState([10, 50]);
  return (
    <Row>
      <Col md={10}>
        <RangeSlider
          progress
          style={{ marginTop: 16 }}
          value={value}
          onChange={value => {
            setValue(value);
          }}
        />
      </Col>
      <Col md={8}>
        <InputGroup>
          <InputNumber
            min={0}
            max={100}
            value={value[0]}
            onChange={nextValue => {
              const [start, end] = value;
              if (nextValue > end) {
                return;
              }
              setValue([nextValue, end]);
            }}
          />
          <InputGroup.Addon>to</InputGroup.Addon>
          <InputNumber
            min={0}
            max={100}
            value={value[1]}
            onChange={nextValue => {
              const [start, end] = value;
              if (start > nextValue) {
                return;
              }
              setValue([start, nextValue]);
            }}
          />
        </InputGroup>
      </Col>
    </Row>
  );
}

function Example3() {
  const [value, setValue] = React.useState([10, 100]);
  return (
    <Row>
      <p>固定其中一个选项</p>
      <Col md={10}>
        <RangeSlider
          progress
          style={{ marginTop: 16 }}
          value={value}
          onChange={value => {
            setValue([value[0], 100]);
          }}
        />
      </Col>
      <Col md={8}>
        <InputGroup>
          <InputNumber
            min={0}
            max={100}
            value={value[0]}
            onChange={nextValue => {
              const [start, end] = value;
              if (nextValue > end) {
                return;
              }
              setValue([nextValue, end]);
            }}
          />
          <InputGroup.Addon>to</InputGroup.Addon>
          <InputNumber min={0} max={100} value={value[1]} disabled />
        </InputGroup>
      </Col>
    </Row>
  );
}

const instance = (
  <div>
    <Example1 />
    <hr />
    <Example2 />
    <hr />
    <Example3 />
  </div>
);

ReactDOM.render(instance);

自定义

class CustomSlider extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      value: 0
    };
  }
  render() {
    const labels = ['A', 'B', 'C', 'D'];
    const { value } = this.state;
    const handleStyle = {
      color: '#fff',
      fontSize: 12,
      width: 32,
      height: 22
    };

    return (
      <div >
        <div style={{ width: 200, marginLeft: 20 }}>
          <Slider
            min={0}
            max={labels.length - 1}
            value={value}
            className="custom-slider"
            handleStyle={handleStyle}
            graduated
            tooltip={false}
            handleTitle={labels[value]}
            onChange={v => {
              this.setState({ value: v });
            }}
          />
        </div>
      </div>
    );
  }
}
ReactDOM.render(<CustomSlider />);

自定义大小

Props

<Slider>

属性名称 类型(默认值) 描述
barClassName string 应用于滑动条 DOM 节点的 css class
defaultValue number 默认值
disabled boolean 是否禁用
graduated boolean 显示刻度
handleClassName string 应用于手柄 DOM 节点的 css class
handleStyle React.CSSProperties 附加手柄样式
handleTitle React.Node 自定义手柄内显示内容
max number(100) 滑动范围的最大值
min number(0) 滑动范围的最小值
onChange (value: number) => void 数据发生改变的回调函数
progress boolean 显示滑动的进度条
renderMark (mark: number) => React.Node 自定义渲染标尺上的标签
step number(1) 滑动一步的值
tooltip boolean(true) 滑动时候,是否显示 tooltip
value number 值(受控)
vertical boolean 垂直滑动

<RangeSlider>

属性名称 类型(默认值) 描述
barClassName string 应用于滑动条 DOM 节点的 css class
defaultValue [number,number] 默认值
disabled boolean 是否禁用
graduated boolean 显示刻度
handleClassName string 应用于手柄 DOM 节点的 css class
handleStyle React.CSSProperties 附加手柄样式
handleTitle React.Node 自定义手柄内显示内容
max number(100) 滑动范围的最大值
min number(0) 滑动范围的最小值
onChange (value: [number,number]) => void 数据发生改变的回调函数
progress boolean 显示滑动的进度条
renderMark (mark: number) => React.Node 自定义渲染标尺上的标签
step number(1) 滑动一步的值
tooltip boolean(true) 滑动时候,是否显示 tooltip
value [number,number] 值(受控)
vertical boolean 垂直滑动
🎉 v5 版本已经发布! 前往 v5 文档开始使用.