ข้ามไปเนื้อหา
WhereUI

ค้นหาในเอกสาร

ค้นหาชื่อ component หรือหน้าเอกสาร

Slider

จาก shadcn

แถบเลื่อนเลือกค่าตัวเลข เช่น จำนวนวันลาหรือเปอร์เซ็นต์เป้าหมาย รองรับหลายหัวเลื่อนเพื่อเลือกช่วงค่า

จำนวนวันลาพักร้อน: 3 วัน
1 วัน15 วัน

ติดตั้ง

Terminal
pnpm dlx shadcn@latest add @whereui/slider

ต้องผูก registry และติดตั้ง @whereui/theme นำหน้าเสมอเมื่อติดตั้งครั้งแรก

การใช้งาน

import * as React from "react"import { Slider } from "@/components/ui/slider"const [value, setValue] = React.useState<number[]>([5])<Slider  value={value}  onValueChange={(v) => setValue(v)}  min={1}  max={30}  step={1}/>

ตัวอย่างเพิ่มเติม

ช่วงค่าสองหัวเลื่อน
ช่วงสัปดาห์ที่อนุญาตให้ลา: สัปดาห์ที่ 25–75

ข้อควรรู้

  • value เป็น array ตามจำนวนหัวเลื่อน เช่น [40] หรือ [25, 75] สำหรับเลือกช่วง
  • กำหนด min max step ให้ตรงค่าที่ธุรกิจยอมรับ เช่น วันลา 1–30 วัน เป็นจำนวนเต็ม
  • ควรแสดงค่าปัจจุบันเป็นตัวเลขข้างแถบเสมอ เพราะหัวเลื่อนอย่างเดียวบอกค่าแม่นยำยาก

ซอร์สโค้ด

components/ui/slider.tsx
import { Slider as SliderPrimitive } from "@base-ui/react/slider"import { cn } from "cn"function Slider({  className,  defaultValue,  value,  min = 0,  max = 100,  ...props}: SliderPrimitive.Root.Props) {  const _values = Array.isArray(value)    ? value    : Array.isArray(defaultValue)      ? defaultValue      : [min, max]  return (    <SliderPrimitive.Root      className={cn("data-horizontal:w-full data-vertical:h-full", className)}      data-slot="slider"      defaultValue={defaultValue}      value={value}      min={min}      max={max}      thumbAlignment="edge"      {...props}    >      <SliderPrimitive.Control className="relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col">        <SliderPrimitive.Track          data-slot="slider-track"          className="relative grow overflow-hidden rounded-full bg-muted select-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1"        >          <SliderPrimitive.Indicator            data-slot="slider-range"            className="bg-primary select-none data-horizontal:h-full data-vertical:w-full"          />        </SliderPrimitive.Track>        {Array.from({ length: _values.length }, (_, index) => (          <SliderPrimitive.Thumb            data-slot="slider-thumb"            key={index}            className="relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50"          />        ))}      </SliderPrimitive.Control>    </SliderPrimitive.Root>  )}export { Slider }