Slider 滑动输入条

允许用户在一个区间中选择特定值,eg:控制屏幕的显示亮度。

规则

  • 默认状态下,左边为最小值,右边为最大值。

  • 一般水平放置。

Common API

适用平台:Web、React-Native
属性说明类型默认值
minNumber0最小值
maxNumber100最大值
stepNumber or null1步长,取值必须大于 0,并且可被 (max - min) 整除。当 marks 不为空对象时,可以设置 stepnull,此时 Slider 的可选值仅有 marks 标出来的部分。
valueNumber设置当前取值。
defaultValueNumber0设置初始取值。
disabledBooleanfalse值为 true 时,滑块为禁用状态
onChangeFunctionNoop当 Slider 的值发生改变时,会触发 onChange 事件,并把改变后的值作为参数传入。
maximumTrackTintColor(iOS)String#108ee9(RN)底部背景色。 (web 端可以使用 theme 来定义颜色)
minimumTrackTintColor(iOS)String#ddd (RN)当前选中部分的颜色。(web 端可以使用 theme 来定义颜色)
onAfterChangeFunctionNoopontouchend 触发时机一致,把当前值作为参数传入。
marks (web only)Object{Number:String}{ }刻度标记,key 的类型必须为 Number 且取值在闭区间 min, max
dots (web only)Booleanfalse是否只能拖拽到刻度上
included (web only)Booleantruemarks 不为空对象时有效,值为 true 时表示值为包含关系,false 表示并列
maximumTrackStyle(web)Object未选中 track 的样式(将被废弃,请使用 railStyle 代替)
minimumTrackStyle(web)Object选中部分的 track 样式 (将被废弃,请使用 trackStyle 代替)
handleStyle(web)Object滑块的样式
trackStyle(web)Object选中部分滑动条的样式
railStyle(web)Object未选中部分

ToolTip(Web Only)

注:1.0.x 之后将原先的Slider拆分成了Slider, Range, creatToolTip, 以便用户按需加载相应的功能使用, 例如带 tooltipslider 使用方式如下:
  1. import { Slider, WingBlank, WhiteSpace, createTooltip } from 'antd-mobile';
  2. const SliderWithTooltip = createTooltip(Slider); // High Order Component
  3. <SliderWithTooltip defaultValue={26} min={0} max={30} />

代码演示

基本

Basic slider. When disabled is true, the slider will not be interactable, you can use createTooltip to encapsulateto simulate tooltip.

  1. /* eslint arrow-body-style: 0 */
  2. import { Slider, WingBlank, WhiteSpace, createTooltip } from 'antd-mobile';
  3. const SliderWithTooltip = createTooltip(Slider);
  4. class App extends React.Component {
  5. log = (name) => {
  6. return (value) => {
  7. console.log(`${name}: ${value}`);
  8. };
  9. }
  10. render() {
  11. return (
  12. <div className="am-slider-example">
  13. <WhiteSpace size="lg" />
  14. <WingBlank size="lg">
  15. <p className="title">Slider</p>
  16. <Slider defaultValue={26} min={0} max={30} onChange={this.log('change')} onAfterChange={this.log('afterChange')} />
  17. </WingBlank>
  18. <WhiteSpace size="lg" />
  19. <WingBlank size="lg">
  20. <p className="title">Slider with ToolTip</p>
  21. <SliderWithTooltip defaultValue={26} min={0} max={30} onChange={this.log('change')} onAfterChange={this.log('afterChange')} />
  22. </WingBlank>
  23. <WhiteSpace size="lg" />
  24. <WingBlank size="lg">
  25. <p className="title">Disabled Slider</p>
  26. <Slider defaultValue={26} min={0} max={30} disabled onChange={this.log('change')} onAfterChange={this.log('afterChange')} />
  27. </WingBlank>
  28. <WhiteSpace size="lg" />
  29. <WingBlank size="lg">
  30. <p className="title">Slider With Customized Color</p>
  31. <Slider
  32. defaultValue={26}
  33. min={0}
  34. max={30}
  35. trackStyle={{
  36. backgroundColor: 'red',
  37. height: '0.1rem',
  38. }}
  39. railStyle={{
  40. backgroundColor: 'blue',
  41. height: '0.1rem',
  42. }}
  43. handleStyle={{
  44. borderColor: 'blue',
  45. height: '0.28rem',
  46. width: '0.28rem',
  47. marginLeft: '-0.14rem',
  48. marginTop: '-0.09rem',
  49. backgroundColor: 'blue',
  50. }}
  51. />
  52. </WingBlank>
  53. </div>
  54. );
  55. }
  56. }
  57. ReactDOM.render(<App />, mountNode);
  1. .demo-preview-item .am-slider-wrapper {
  2. margin-bottom: 0.3rem;
  3. }
  4. .demo-preview-item .am-slider-example {
  5. overflow: hidden;
  6. }
  7. .am-wingblank.am-wingblank-lg {
  8. margin-bottom: 0.6rem;
  9. }
  10. .demo-preview-item .am-slider-wrapper:last-child {
  11. margin-bottom: 0.2rem;
  12. }

带 icon 的滑块

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

  1. import { Slider, WhiteSpace, WingBlank, Icon, createTooltip } from 'antd-mobile';
  2. const SliderWithTooltip = createTooltip(Slider);
  3. class IconSlider extends React.Component {
  4. constructor(props) {
  5. super(props);
  6. const max = this.props.max;
  7. const min = this.props.min;
  8. const mid = ((max - min) / 2).toFixed(5);
  9. this.state = {
  10. preIconClass: this.props.value >= mid ? '' : 'anticon-highlight',
  11. nextIconClass: this.props.value >= mid ? 'anticon-highlight' : '',
  12. mid,
  13. sliderValue: this.props.value,
  14. };
  15. }
  16. handleChange = (v) => {
  17. this.setState({
  18. preIconClass: v >= this.state.mid ? '' : 'anticon-highlight',
  19. nextIconClass: v >= this.state.mid ? 'anticon-highlight' : '',
  20. sliderValue: v,
  21. });
  22. }
  23. render() {
  24. return (
  25. <div>
  26. <WhiteSpace size="lg" />
  27. <WingBlank size="lg">
  28. <div className="iconWrapper">
  29. <Icon className={this.state.preIconClass} type={this.props.icon[0]} />
  30. <SliderWithTooltip {...this.props} onChange={this.handleChange} value={this.state.sliderValue} />
  31. <Icon className={this.state.nextIconClass} type={this.props.icon[1]} />
  32. </div>
  33. </WingBlank>
  34. <WhiteSpace size="lg" />
  35. </div>
  36. );
  37. }
  38. }
  39. ReactDOM.render(
  40. <IconSlider min={0} max={20} value={0} icon={['check-circle', 'cross-circle']} />
  41. , mountNode);
  1. .iconWrapper {
  2. position: relative;
  3. padding: 0 0.62rem;
  4. }
  5. .iconWrapper .am-icon {
  6. position: absolute;
  7. top: -0.18rem;
  8. width: 0.44rem;
  9. height: 0.44rem;
  10. line-height: 1;
  11. font-size: 0.44rem;
  12. color: #000;
  13. }
  14. .iconWrapper .am-icon:first-child {
  15. left: 0;
  16. }
  17. .iconWrapper .am-icon:last-child {
  18. right: 0;
  19. }
  20. .anticon.anticon-highlight {
  21. color: #666;
  22. }

自定义滑动反馈

可以利用 HOCSlider 进行封装以自定义 Tooltip
  1. / eslint arrow-body-style: 0 /import { Slider, WingBlank, WhiteSpace } from 'antd-mobile';const createCustomTooltip = (Component) => { return class ComponentWrapper extends React.Component { handleWithTooltip = ({ value, dragging, index, className, vertical, offset, restProps }) => { const style = vertical ? { bottom: ${offset}% } : { left: ${offset}% }; const tipStyle = { textAlign: 'center' }; return ( <div key={index}> <div {…restProps} className={className} style={style} /> <div style={tipStyle}>{dragging && 拖动到了${value} }</div> </div> ); } render() { return <Component {…this.props} handle={this.handleWithTooltip} />; } };};const SliderWithCustomTooltip = createCustomTooltip(Slider);class App extends React.Component { log = (name) => { return (value) => { console.log(${name}: ${value}); }; } render() { return ( <div className="am-slider-example"> <WhiteSpace size="lg" /> <WingBlank size="lg"> <p className="title">Slider 自定义 ToolTip</p> <SliderWithCustomTooltip defaultValue={26} min={0} max={30} onChange={this.log('change')} onAfterChange={this.log('afterChange')} /> </WingBlank> <WhiteSpace size="lg" /> </div> ); }}ReactDOM.render(<App />, mountNode);
  1. .demo-preview-item .am-slider-wrapper { margin-bottom: 0.3rem;}.demo-preview-item .am-slider-example { overflow: hidden;}.am-wingblank.am-wingblank-lg { margin-bottom: 0.6rem;}.demo-preview-item .am-slider-wrapper:last-child { margin-bottom: 0.2rem;}
Slider滑动输入条 - 图1