Slider滑动输入条

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

何时使用

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

单独引入此组件

想要了解更多关于单独引入组件的内容,可以在快速上手页面进行查看。

  1. import { NzSliderModule } from 'ng-zorro-antd/slider';

代码演示

Slider滑动输入条 - 图1

基本

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

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-basic',
  4. template: `
  5. <nz-slider [(ngModel)]="value1" [nzDisabled]="disabled"></nz-slider>
  6. <nz-slider nzRange [(ngModel)]="value2" [nzDisabled]="disabled"></nz-slider>
  7. Disabled:
  8. <nz-switch nzSize="small" [(ngModel)]="disabled"></nz-switch>
  9. `
  10. })
  11. export class NzDemoSliderBasicComponent {
  12. disabled = false;
  13. value1 = 30;
  14. value2 = [20, 50];
  15. }

Slider滑动输入条 - 图2

带 icon 的滑块

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

  1. import { Component, OnInit } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-icon-slider',
  4. template: `
  5. <div class="icon-wrapper test-class">
  6. <i nz-icon nzType="frown" [class.icon-highlight]="preHighLight"></i>
  7. <nz-slider [nzMin]="0" [nzMax]="20" [(ngModel)]="sliderValue"></nz-slider>
  8. <i nz-icon nzType="smile" [class.icon-highlight]="nextHighLight"></i>
  9. </div>
  10. `,
  11. styles: [
  12. `
  13. .icon-wrapper {
  14. position: relative;
  15. padding: 0px 30px;
  16. }
  17. [nz-icon] {
  18. position: absolute;
  19. top: -2px;
  20. width: 16px;
  21. height: 16px;
  22. line-height: 1;
  23. font-size: 16px;
  24. color: rgba(0, 0, 0, 0.25);
  25. }
  26. [nz-icon]:first-child {
  27. left: 0;
  28. }
  29. [nz-icon]:last-child {
  30. right: 0;
  31. }
  32. .icon-highlight {
  33. color: rgba(0, 0, 0, 0.45);
  34. }
  35. `
  36. ]
  37. })
  38. export class NzDemoSliderIconSliderComponent implements OnInit {
  39. min = 0;
  40. max = 20;
  41. mid = parseFloat(((this.max - this.min) / 2).toFixed(5));
  42. preHighLight = false;
  43. nextHighLight = false;
  44. _sliderValue = 0;
  45. set sliderValue(value: number) {
  46. this._sliderValue = value;
  47. this.highlightIcon();
  48. }
  49. get sliderValue(): number {
  50. return this._sliderValue;
  51. }
  52. ngOnInit(): void {
  53. this.sliderValue = 0;
  54. }
  55. highlightIcon() {
  56. const lower = this._sliderValue >= this.mid;
  57. this.preHighLight = !lower;
  58. this.nextHighLight = lower;
  59. }
  60. }

Slider滑动输入条 - 图3

事件

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

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-event',
  4. template: `
  5. <nz-slider
  6. [(ngModel)]="singleValue"
  7. (ngModelChange)="onChange($event)"
  8. (nzOnAfterChange)="onAfterChange($event)"
  9. ></nz-slider>
  10. <nz-slider
  11. nzRange
  12. [nzStep]="10"
  13. [(ngModel)]="rangeValue"
  14. (ngModelChange)="onChange($event)"
  15. (nzOnAfterChange)="onAfterChange($event)"
  16. ></nz-slider>
  17. `
  18. })
  19. export class NzDemoSliderEventComponent {
  20. singleValue = 30;
  21. rangeValue = [20, 50];
  22. onChange(value: number): void {
  23. console.log(`onChange: ${value}`);
  24. }
  25. onAfterChange(value: number): void {
  26. console.log(`onAfterChange: ${value}`);
  27. }
  28. }

Slider滑动输入条 - 图4

垂直

垂直方向的 Slider。

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-vertical',
  4. template: `
  5. <div [ngStyle]="{ height: '300px' }">
  6. <div [ngStyle]="style">
  7. <nz-slider nzVertical [ngModel]="30"></nz-slider>
  8. </div>
  9. <div [ngStyle]="style">
  10. <nz-slider nzVertical nzRange [nzStep]="10" [ngModel]="[20, 50]"></nz-slider>
  11. </div>
  12. <div [ngStyle]="style">
  13. <nz-slider nzVertical nzRange [nzMarks]="marks" [ngModel]="[26, 37]"></nz-slider>
  14. </div>
  15. </div>
  16. `
  17. })
  18. export class NzDemoSliderVerticalComponent {
  19. style = {
  20. float: 'left',
  21. height: '300px',
  22. marginLeft: '70px'
  23. };
  24. marks = {
  25. 0: '0°C',
  26. 26: '26°C',
  27. 37: '37°C',
  28. 100: {
  29. style: {
  30. color: '#f50'
  31. },
  32. label: '<strong>100°C</strong>'
  33. }
  34. };
  35. }

Slider滑动输入条 - 图5

带输入框的滑块

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

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-input-number',
  4. template: `
  5. <nz-row>
  6. <nz-col nzSpan="12">
  7. <nz-slider [nzMin]="1" [nzMax]="20" [(ngModel)]="value1"></nz-slider>
  8. </nz-col>
  9. <div nz-col nzSpan="4">
  10. <nz-input-number
  11. [nzMin]="1"
  12. [nzMax]="20"
  13. [ngStyle]="{ marginLeft: '16px' }"
  14. [(ngModel)]="value1"
  15. ></nz-input-number>
  16. </div>
  17. </nz-row>
  18. <nz-row>
  19. <nz-col nzSpan="12">
  20. <nz-slider [nzMin]="0" [nzMax]="1" [nzStep]="0.01" [(ngModel)]="value2"></nz-slider>
  21. </nz-col>
  22. <nz-col nzSpan="4">
  23. <nz-input-number
  24. [nzMin]="0"
  25. [nzMax]="1"
  26. [ngStyle]="{ marginLeft: '16px' }"
  27. [nzStep]="0.01"
  28. [(ngModel)]="value2"
  29. ></nz-input-number>
  30. </nz-col>
  31. </nz-row>
  32. `
  33. })
  34. export class NzDemoSliderInputNumberComponent {
  35. value1 = 1;
  36. value2 = 0;
  37. }

Slider滑动输入条 - 图6

自定义提示

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

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-tip-formatter',
  4. template: `
  5. <nz-slider [nzTipFormatter]="formatter"></nz-slider>
  6. <nz-slider [nzTipFormatter]="null"></nz-slider>
  7. `
  8. })
  9. export class NzDemoSliderTipFormatterComponent {
  10. formatter(value: number): string {
  11. return `${value}%`;
  12. }
  13. }

Slider滑动输入条 - 图7

带标签的滑块

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

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-mark',
  4. template: `
  5. <div>
  6. <h4>included=true</h4>
  7. <nz-slider [nzMarks]="marks" [ngModel]="37"></nz-slider>
  8. <nz-slider [nzMarks]="marks" nzIncluded nzRange [ngModel]="[26, 37]"></nz-slider>
  9. <h4>included=false</h4>
  10. <nz-slider [nzMarks]="marks" [nzIncluded]="false" [ngModel]="37"></nz-slider>
  11. <h4>marks & step</h4>
  12. <nz-slider [nzMarks]="marks" [nzStep]="10" [ngModel]="37"></nz-slider>
  13. <h4>step=null || dots=true</h4>
  14. <nz-slider [nzMarks]="marks" [nzStep]="null" [ngModel]="37"></nz-slider>
  15. <nz-slider [nzMarks]="marks" nzDots [ngModel]="37"></nz-slider>
  16. Change nzMarks dynamically: <button nz-button (click)="changeMarks()">Change nzMarks</button>
  17. </div>
  18. `,
  19. styles: [
  20. `
  21. h4 {
  22. margin: 0 0 16px;
  23. }
  24. .ant-slider-with-marks {
  25. margin-bottom: 44px;
  26. }
  27. `
  28. ]
  29. })
  30. export class NzDemoSliderMarkComponent {
  31. marks: any = {
  32. 0: '0°C',
  33. 26: '26°C',
  34. 37: '37°C',
  35. 100: {
  36. style: {
  37. color: '#f50'
  38. },
  39. label: '<strong>100°C</strong>'
  40. }
  41. };
  42. changeMarks() {
  43. this.marks = {
  44. 20: '20%',
  45. 99: '99%'
  46. };
  47. }
  48. }

Slider滑动输入条 - 图8

控制 Tooltip 的显示

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

  1. import { Component } from '@angular/core';
  2. @Component({
  3. selector: 'nz-demo-slider-tooltip',
  4. template: `
  5. <nz-slider [nzTooltipVisible]="'always'"></nz-slider>
  6. <nz-slider [nzTooltipVisible]="'never'"></nz-slider>
  7. `
  8. })
  9. export class NzDemoSliderTooltipComponent {}

API

nz-slidercomponent

参数说明类型默认值
[nzDisabled]值为 true 时,滑块为禁用状态booleanfalse
[nzDots]是否只能拖拽到刻度上booleanfalse
[nzIncluded]marks 不为空对象时有效,值为 true 时表示值为包含关系,false 表示并列booleantrue
[nzMarks]刻度标记,key 的类型必须为 number 且取值在闭区间 [min, max] 内,每个标签可以单独设置样式object{ number: string/HTML } or { number: { style: object, label: string/HTML } }
[nzMax]最大值number100
[nzMin]最小值number0
[nzRange]双滑块模式booleanfalse
[nzStep]步长,取值必须大于 0,并且可被 (max - min) 整除。当 marks 不为空对象时,可以设置 stepnull,此时 Slider 的可选值仅有 marks 标出来的部分。number | null1
[nzTipFormatter]Slider 会把当前值传给 nzTipFormatter,并在 Tooltip 中显示 nzTipFormatter 的返回值,若为 null,则隐藏 Tooltip。(value: number) => string-
[ngModel]设置当前取值。当 rangefalse 时,使用 number,否则用 [number, number]number | number[]-
[nzVertical]值为 true 时,Slider 为垂直方向booleanfalse
[nzTooltipVisible]值为 always 时总是显示,值为 never 时在任何情况下都不显示'default' | 'always' | 'never'default
(nzOnAfterChange)onmouseup 触发时机一致,把当前值作为参数传入。EventEmitter<number[] | number>-
(ngModelChange)当 Slider 的值发生改变时,会触发 ngModelChange 事件,并把改变后的值作为参数传入。EventEmitter<number[] | number>>-