使用高级 Chakra UI 组件,更快地构建!💎

了解更多
跳到内容
文档演练场指南博客
赞助商

滑块

用于允许用户从一系列值中进行选择。

源码故事书配方Ark

用法

import { Slider } from "@chakra-ui/react"
<Slider.Root>
  <Slider.Label />
  <Slider.ValueText />
  <Slider.Control>
    <Slider.Track>
      <Slider.Range />
    </Slider.Track>
    <Slider.Thumb>
      <Slider.DraggingIndicator />
      <Slider.HiddenInput />
    </Slider.Thumb>
    <Slider.MarkerGroup>
      <Slider.Marker />
    </Slider.MarkerGroup>
  </Slider.Control>
</Slider.Root>
信息
如果您更喜欢封闭式的组件组合,请查看下方代码片段

快捷方式

Slider.Thumbs

此组件为每个值渲染 Slider.ThumbSlider.HiddenInput 组件。

以下代码可行

<Slider.Thumb index={0}>
  <Slider.HiddenInput />
</Slider.Thumb>

但如果您不需要自定义滑块手柄,这可能会更好

<Slider.Thumbs />

Slider.Marks

此组件为每个值渲染 Slider.MarkerGroupSlider.Marker 组件。

以下代码可行

<Slider.MarkerGroup>
  <Slider.Marker value={0} />
  <Slider.Marker value={50} />
</Slider.MarkerGroup>

但如果您不需要自定义标记,这可能会更好

<Slider.Marks marks={[0, 50]} />

示例

尺寸

使用 size 属性来改变滑块的尺寸。

变体

使用 variant 属性来改变滑块的视觉样式。

颜色

使用 colorPalette 属性来改变滑块的颜色。

标签

使用 label 属性为滑块添加标签。

范围滑块

valuedefaultValue 属性设置为数组,以创建范围滑块。

防止重叠

使用 minStepsBetweenThumbs 属性,以避免滑块手柄具有相同值。

自定义

这是一个使用自定义图标和背景来自定义滑块手柄的示例。

值文本

使用 Slider.ValueText 组件来显示滑块的当前值。

40

受控

使用 valueonValueChange 属性来控制滑块的值。

状态管理

控制滑块的另一种方法是使用 RootProvider 组件和 useSlider 状态管理钩子。

通过这种方式,您可以从滑块外部访问滑块的状态和方法。

当前40

Hook 表单

这是一个如何将滑块与 react-hook-form 集成的示例。

禁用

使用 disabled 属性来禁用滑块。

改变结束

使用 onValueChangeEnd 属性来监听滑块值改变的结束事件。

onChange: 50onChangeEnd: 50

步长

使用 step 属性来设置滑块的步长值。

手柄对齐

使用 thumbAlignmentthumbSize 属性来将滑块手柄对齐到轨道内。默认情况下,手柄对齐到轨道的起始位置。

标记

使用 marks 属性在滑块上显示标记。

尺寸 =

尺寸 =

尺寸 =

您还可以使用 marks 属性为标记添加标签。

垂直

使用 orientation 属性来改变滑块的方向。

带标记的垂直滑块

这是一个带标记的垂直滑块示例。

拖动指示器

渲染 Slider.DraggingIndicator 组件,以在拖动滑块手柄时显示指示器或工具提示。

专业提示:您可以在 Slider.DraggingIndicator 组件内部渲染 Slider.ValueText 组件,以显示当前值。

封闭式组件

如果您更喜欢封闭式的组件组合,请查看下方代码片段。

import { Slider as ChakraSlider, HStack } from "@chakra-ui/react"
import * as React from "react"

export interface SliderProps extends ChakraSlider.RootProps {
  marks?: Array<number | { value: number; label: React.ReactNode }>
  label?: React.ReactNode
  showValue?: boolean
}

export const Slider = React.forwardRef<HTMLDivElement, SliderProps>(
  function Slider(props, ref) {
    const { label, showValue, marks, ...rest } = props
    return (
      <ChakraSlider.Root ref={ref} thumbAlignment="center" {...rest}>
        {label && !showValue && (
          <ChakraSlider.Label>{label}</ChakraSlider.Label>
        )}
        {label && showValue && (
          <HStack justify="space-between">
            <ChakraSlider.Label>{label}</ChakraSlider.Label>
            <ChakraSlider.ValueText />
          </HStack>
        )}
        <ChakraSlider.Control>
          <ChakraSlider.Track>
            <ChakraSlider.Range />
          </ChakraSlider.Track>
          <ChakraSlider.Thumbs />
          <ChakraSlider.Marks marks={marks} />
        </ChakraSlider.Control>
      </ChakraSlider.Root>
    )
  },
)

如果您想自动将封闭式组件添加到您的项目中,请运行命令

npx @chakra-ui/cli snippet add slider

属性

属性默认值类型
max '100'
number

滑块的最大值

min '0'
number

滑块的最小值

minStepsBetweenThumbs '0'
number

多个滑块手柄之间允许的最小步长。

orientation 'horizontal'
'vertical' | 'horizontal'

组件的方向

origin '\'start\''
'center' | 'start'

滑块范围的起点 - “start”:当值代表绝对值时很有用 - “center”:当值代表偏移量(相对值)时很有用

step '1'
number

滑块的步长值

thumbAlignment '\'contain\''
'center' | 'contain'

滑块手柄相对于轨道的对齐方式 - `center`:手柄将超出滑块轨道的边界。 - `contain`:手柄将包含在轨道的边界内。

colorPalette 'gray'
'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink'

组件的调色板

size 'md'
'sm' | 'md' | 'lg'

组件的尺寸

variant 'outline'
'outline' | 'solid'

组件的变体

aria-label
string[]

每个滑块手柄的 aria-label。用于为滑块提供无障碍名称。

aria-labelledby
string[]

标注每个滑块手柄的元素的 `id`。用于为滑块提供无障碍名称。

asChild
boolean

使用提供的子元素作为默认渲染元素,结合它们的属性和行为。

更多详情,请阅读我们的 组合 指南。
defaultValue
number[]

滑块首次渲染时的初始值。当您不需要控制滑块选择器的状态时使用。

disabled
boolean

滑块是否被禁用

form
string

底层输入元素的关联表单。

getAriaValueText
(details: ValueTextDetails) => string

返回滑块手柄可读值的函数

id
string

机器的唯一标识符。

ids
Partial<{ root: string thumb(index: number): string hiddenInput(index: number): string control: string track: string range: string label: string valueText: string marker(index: number): string }>

范围滑块中元素的 ID。用于组合。

invalid
boolean

滑块是否无效

name
string

与每个滑块手柄关联的名称(在表单中使用时)

onFocusChange
(details: FocusChangeDetails) => void

当滑块的焦点索引改变时调用的函数

onValueChange
(details: ValueChangeDetails) => void

当滑块的值改变时调用的函数

onValueChangeEnd
(details: ValueChangeDetails) => void

当滑块值改变完成时调用的函数

readOnly
boolean

滑块是否为只读

thumbSize
{ width: number; height: number }

滑块手柄的尺寸

value
number[]

范围滑块的值

上一个

骨架屏

下一个

加载中