# Slider Thanh kéo chọn một giá trị trong khoảng, dùng cho âm lượng và tốc độ ngày (4/5/6 phút). ## Khi nào dùng - Chọn giá trị liên tục hoặc theo bước trong [min, max], có thể kèm nhãn mốc. - Cần chính xác từng đơn vị thì dùng Stepper. ## Biến thể | Biến thể | Lớp | Dùng khi | |---|---|---| | Mặc định | `tt-slider` | Nhãn + giá trị + thanh + mốc (tuỳ chọn) | ## Cấu trúc ```html
``` ## Trạng thái | Trạng thái | Hiệu ứng | |---|---| | Thường | Rãnh `fill-muted` viền `line`, phần đã chọn `pink`, núm `pink` bóng `shadow-press` | | Đang kéo | Núm lún 3px (`shadow-press-down`) | | `:disabled` | opacity .4 | | Focus | Vòng `focus-ring` 3px quanh thanh | ## Hành vi JS ```js var s = TTMU.slider(el, { format: function (v) { return v + " phút"; }, onChange: function (v) {} }); s.value; // số hiện tại s.set(6); // đặt từ code, không gọi onChange ``` - Nên ghi sẵn `style="--tt-slider-pct:…"` (= (value−min)/(max−min)) để thanh tô đúng trước khi JS chạy. JS cập nhật `--tt-slider-pct` (tô phần đã chọn trên Chrome/Safari; Firefox tô bằng `::-moz-range-progress`), chữ `.tt-slider__value` và `aria-valuetext`. - Gắn một lần (`data-tt-bound`); trả về `{ value, set(n), destroy() }`. - **Quy ước `onChange`:** chỉ thao tác của người dùng mới gọi `onChange`, và chỉ khi giá trị thật sự đổi; `set()` im lặng. ## Token sử dụng `pink`, `pink-d`, `fill-muted`, `line`, `soft`, `shadow-press`, `shadow-press-down`, `radius-pill`, `radius-round`, `space-8/14`. ## Khả năng tiếp cận - `` thật: mũi tên, Home/End, PageUp/PageDown dùng được; có `