Slider 滑动输入条

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

规则

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

  • 一般水平放置。

代码演示

基本

基本滑动条。当 disabledtrue 时,滑块处于不可用状态。

  1. import { Slider, WingBlank, WhiteSpace } from 'antd-mobile';
  2. const App = React.createClass({
  3. render() {
  4. return (
  5. <div className="am-slider-example">
  6. <WhiteSpace size="lg" />
  7. <WingBlank size="lg">
  8. <p className="title">单模块</p>
  9. <Slider defaultValue={26} min={0} max={100} />
  10. </WingBlank>
  11. <WhiteSpace size="lg" />
  12. <WingBlank size="lg">
  13. <p className="title">不可用状态</p>
  14. <Slider defaultValue={26} disabled />
  15. </WingBlank>
  16. <WhiteSpace size="lg" />
  17. </div>
  18. );
  19. },
  20. });
  21. 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-example .title {
  11. margin-bottom: 0.32rem;
  12. }
  13. .demo-preview-item .am-slider-wrapper:last-child {
  14. margin-bottom: 0.2rem;
  15. }

事件

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

  1. import { Slider, WingBlank, WhiteSpace } from 'antd-mobile';
  2. function log(value) {
  3. console.log(value);
  4. }
  5. const App = React.createClass({
  6. render() {
  7. return (
  8. <div>
  9. <WhiteSpace size="lg" />
  10. <WingBlank size="lg">
  11. <Slider defaultValue={30} onChange={log} />
  12. </WingBlank>
  13. <WhiteSpace size="lg" />
  14. <WingBlank size="lg">
  15. <Slider defaultValue={30} onAfterChange={log} />
  16. </WingBlank>
  17. <WhiteSpace size="lg" />
  18. </div>
  19. );
  20. },
  21. });
  22. ReactDOM.render(<App />, mountNode);

带 icon 的滑块

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

  1. import { Slider, WhiteSpace, WingBlank } from 'antd-mobile';
  2. import Icon from '../../icon';
  3. const IconSlider = React.createClass({
  4. getInitialState() {
  5. const max = this.props.max;
  6. const min = this.props.min;
  7. const mid = ((max - min) / 2).toFixed(5);
  8. return {
  9. preIconClass: this.props.value >= mid ? '' : 'anticon-highlight',
  10. nextIconClass: this.props.value >= mid ? 'anticon-highlight' : '',
  11. mid,
  12. sliderValue: this.props.value,
  13. };
  14. },
  15. handleChange(v) {
  16. this.setState({
  17. preIconClass: v >= this.state.mid ? '' : 'anticon-highlight',
  18. nextIconClass: v >= this.state.mid ? 'anticon-highlight' : '',
  19. sliderValue: v,
  20. });
  21. },
  22. render() {
  23. return (
  24. <div>
  25. <WhiteSpace size="lg" />
  26. <WingBlank size="lg">
  27. <div className="iconWrapper">
  28. <Icon className={this.state.preIconClass} type={this.props.icon[0]} />
  29. <Slider {...this.props} onChange={this.handleChange} value={this.state.sliderValue} />
  30. <Icon className={this.state.nextIconClass} type={this.props.icon[1]} />
  31. </div>
  32. </WingBlank>
  33. <WhiteSpace size="lg" />
  34. </div>
  35. );
  36. },
  37. });
  38. ReactDOM.render(
  39. <IconSlider min={0} max={20} value={0} icon={['frown', 'smile']} />
  40. , mountNode);
  1. .iconWrapper {
  2. position: relative;
  3. padding: 0 0.62rem;
  4. }
  5. .iconWrapper .anticon {
  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 .anticon:first-child {
  15. left: 0;
  16. }
  17. .iconWrapper .anticon:last-child {
  18. right: 0;
  19. }
  20. .anticon.anticon-highlight {
  21. color: #666;
  22. }

自定义提示

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

  1. import { Slider, WhiteSpace, WingBlank } from 'antd-mobile';
  2. function formatter(value) {
  3. return `${value}%`;
  4. }
  5. const App = React.createClass({
  6. render() {
  7. return (
  8. <div className="am-slider-example">
  9. <WhiteSpace size="lg" />
  10. <WingBlank size="lg">
  11. <p className="title">格式化Tooltip</p>
  12. <Slider tipFormatter={formatter} />
  13. </WingBlank>
  14. <WhiteSpace size="lg" />
  15. <WingBlank size="lg">
  16. <p className="title">隐藏Tooltip</p>
  17. <Slider tipFormatter={null} />
  18. </WingBlank>
  19. <WhiteSpace size="lg" />
  20. </div>
  21. );
  22. },
  23. });
  24. ReactDOM.render(<App />, mountNode);

Slider滑动输入条 - 图1

API ( 适用平台:WEB、React-Native )

参数类型默认值说明
minNumber0最小值
maxNumber100最大值
stepNumber or null1步长,取值必须大于 0,并且可被 (max - min) 整除。当 marks 不为空对象时,可以设置 stepnull,此时 Slider 的可选值仅有 marks 标出来的部分。
valueNumber设置当前取值。
defaultValueNumber0 or [0, 0]设置初始取值。
disabledBooleanfalse值为 true 时,滑块为禁用状态
onChangeFunctionNoop当 Slider 的值发生改变时,会触发 onChange 事件,并把改变后的值作为参数传入。
onAfterChangeFunctionNoopontouchend 触发时机一致,把当前值作为参数传入。
marks (web only)Object{Number:String}{ }刻度标记,key 的类型必须为 Number 且取值在闭区间 [min, max]
dots (web only)Booleanfalse是否只能拖拽到刻度上
included (web only)Booleantruemarks 不为空对象时有效,值为 true 时表示值为包含关系,false 表示并列
tipFormatter (web only)Function or nullIDENTITYSlider 会把当前值传给 tipFormatter,并在 Tooltip 中显示 tipFormatter 的返回值,若为 null,则隐藏 Tooltip。