Frontend Lab
← 回到所有模式
PE04⌨️ Input · 進階輸入範圍

Slider

滑桿

難度 ★★★★★標籤 slider · range · step2 min read

模式簡述

Slider:拖曳取值。音量、亮度、價格篩選都會用。比輸入數字直觀但精度差。

音量8
0100
最小|靠左 — 接近 0

Claude Code Prompt

💬 Claude Code Prompt
參考:PE04 slider
組件:Slider.tsx

Slider:拖曳取值。音量、亮度、價格篩選都會用。比輸入數字直觀但精度差。

限制:
- 沒顯示當前值
- step 沒設
- 鍵盤無法調

完整程式碼

Slider.tsx
"use client";
import { useEffect, useState } from "react";

type State = "min" | "mid" | "max";

export function Slider({ state = "mid" }: { state?: State }) {
const pct = state === "min" ? 8 : state === "max" ? 92 : 50;
const [v, setV] = useState(pct);
useEffect(() => setV(pct), [pct]);

return (
  <div className="w-full max-w-md">
    <div className="mb-3 flex items-center justify-between">
      <span className="font-mono text-[11px] text-muted-foreground">音量</span>
      <span className="font-mono text-xs text-foreground">{v}</span>
    </div>
    <div className="relative h-6">
      <div className="absolute inset-x-0 top-1/2 h-1 -translate-y-1/2 rounded-full bg-muted" />
      <div
        className="absolute left-0 top-1/2 h-1 -translate-y-1/2 rounded-full bg-lab-accent"
        style={{ width: `${v}%` }}
      />
      <input
        type="range"
        min={0}
        max={100}
        value={v}
        onChange={(e) => setV(Number(e.target.value))}
        className="absolute inset-0 h-full w-full cursor-pointer appearance-none bg-transparent
          [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4
          [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full
          [&::-webkit-slider-thumb]:bg-foreground [&::-webkit-slider-thumb]:shadow"
      />
    </div>
    <div className="mt-2 flex justify-between font-mono text-[10px] text-muted-foreground">
      <span>0</span>
      <span>100</span>
    </div>
  </div>
);
}

何時用

  • ✅ 音量、亮度、不透明度等連續值
  • ✅ 價格區間篩選
  • ✅ 圖片裁切、設計工具的數值微調

何時別用

  • ❌ 精確輸入(如金額 12345.67)
  • ❌ 離散且少量的選項(用 segmented control)
  • ❌ 手機觸控精度要求高的場景

我踩過的坑

  1. 沒顯示當前值:拖曳時看不到數字。要 tooltip 或旁邊 label 即時顯示。

  2. step 沒設:0-100 連續但其實只要整數。設 step=1 跳整數。

  3. 鍵盤無法調:focus 後 ArrowLeft/Right 要可微調,PgUp/PgDn 大步調。

相關模式

  • PE02

搜尋

按 ⌘K 隨時開啟