@nami-ui/slider
TypeScript icon, indicating that this package has built-in type declarations

0.0.5 • Public • Published

id: slider title: Slider subtitle: 滑动条

用于在给定的一个数值区间中选择某个数值。

import { Slider } from '@nami-ui/slider'

export default () => {
  const [value, setValue] = useState(0)
  return <Slider value={value} onChange={setValue} />
}

禁用

通过设置 disabled 属性,可以设置滑动条为禁用状态:

import { Slider } from '@nami-ui/slider'

export default () => <Slider disabled defaultValue={0} />

方向

可能通过设置 vertical 将滑动条切换为垂直方向,或者设置 reverse 来切换为反向滑动:

import { HStack, VStack } from '@nami-ui/stack'
import { Slider } from '@nami-ui/slider'

export default () => (
  <HStack spacing>
    <VStack spacing style={{ width: 100 }}>
      <Slider />
      <Slider reverse />
    </VStack>

    <Slider vertical />
    <Slider vertical reverse />
  </HStack>
)

区间

可以通过设置 minmaxsteppoints 来定制数值区间,默认为 { min: 0, max: 1 }

import { Slider } from '@nami-ui/slider'

export default () => (
  <div>
    <label>min: 0, max: 100</label>
    <Slider min={0} max={100} />

    <label>min: 0, max: 100, step: 10</label>
    <Slider min={0} max={100} step={10} />

    <label>
      min: 0, max: 100, points: 0, 27, 38, 56, 72, 94
    </label>
    <Slider
      min={0}
      max={100}
      points={[0, 27, 38, 56, 72, 94]}
    />

    <label>
      min: 0, max: 100, step: 10, points: 0, 27, 38, 56, 72,
      94
    </label>
    <Slider
      min={0}
      max={100}
      step={10}
      points={[0, 27, 38, 56, 72, 94]}
    />
  </div>
)

另外,可以通过设置 marks 来显示 step 和 points 对应的点位:

import { Slider } from '@nami-ui/slider'

export default () => (
  <Slider
    min={0}
    max={100}
    step={10}
    points={[0, 27, 38, 56, 72, 94]}
    marks
  />
)

marks 可以配置仅显示 step 对应的点位,或仅显示 points 的:

import { Slider } from '@nami-ui/slider'

export default () => (
  <div>
    <label>marks: step</label>
    <Slider
      min={0}
      max={100}
      step={10}
      points={[0, 27, 38, 56, 72, 94]}
      marks="step"
    />

    <label>marks: points</label>
    <Slider
      min={0}
      max={100}
      step={10}
      points={[0, 27, 38, 56, 72, 94]}
      marks="points"
    />
  </div>
)

以及如果需要的话,还可以通过设置 pointMarkLabel 来定制 point 点位下的标签内容及样式:

import clsx from 'clsx'
import { Slider } from '@nami-ui/slider'

export default () => (
  <Slider
    min={0}
    max={100}
    points={[0, 27, 38, 56, 72, 94]}
    pointMarkLabel={PointLabel}
  />
)

function PointLabel({
  value,
  active,
  className,
  ...otherProps
}) {
  const props = {
    ...otherProps,
    className: clsx('point-label', { active }, className),
  }

  return <span {...props}>{value}°C</span>
}

多滑块

根据滑块数量的不同,通常滑动条可以分为三种类型:

  • 单滑块滑动条,仅有一个滑块;
  • 双滑块滑动条,仅有两个滑块;
  • 多滑块滑动条,有三个或三个以上滑块。

这根据所传入值的数量来决定,比如:

import { Slider } from '@nami-ui/slider'

export default () => (
  <div>
    <Slider defaultValue={[0]} /> // or: single 0
    <Slider defaultValue={[0, 1]} />
    <Slider defaultValue={[0, 0.5, 1]} />
  </div>
)

通常情况下,在单滑块滑动条及双滑块滑动条中,用户所选的都是一个区间值,比如在单滑块滑动条中,所选区间为 [起始值,选中值],而在双滑块滑动条中,则为 [左侧选中值,右侧选中值],而且有时我们会希望在 UI 上高亮所选区间,而这可以通过设置 range 属性来实现:

import { Slider } from '@nami-ui/slider'

export default () => (
  <div>
    <Slider defaultValue={0} range />
    <Slider defaultValue={[0, 1]} range />
  </div>
)

range 属性仅在单滑块或双滑块时有效,而在多滑块滑动条中,该属性固定为 false。

另外还请注意,在双滑块中开启 range 属性后,所传入的值应当是有序的,当然 onChange 事件中返回的值也会是有序的。

交互

该滑动条组件除支持指针(鼠标、手指)拖拽之外,还支持滚轮及快捷键(仅当组件获取到焦点时支持)。

Readme

Keywords

Package Sidebar

Install

npm i @nami-ui/slider

Weekly Downloads

0

Version

0.0.5

License

MIT

Unpacked Size

18.1 kB

Total Files

8

Last publish

Collaborators

  • biossun
  • biossun-by-nami-ui