<div class="demo-col" style="width:100%;max-width:420px"> <div class="icen-slider-row"><span>音量</span><span id="demo-slider-val">40</span></div> <div class="icen-slider"> <div class="icen-slider-track"></div> <div class="icen-slider-fill" style="width:40%"></div> <div class="icen-slider-thumb" style="left:calc(40% - 8px)"></div> <input class="icen-slider-native" id="demo-slider" type="range" min="0" max="100" value="40" aria-label="音量" /> </div></div><div class="demo-col" style="width:100%;max-width:420px;margin-top:16px"> <div class="icen-slider-row"><span>价格区间</span><span id="demo-dual-val">20 – 80</span></div> <div class="icen-slider icen-slider--dual" id="demo-dual"> <div class="icen-slider-track"></div> <div class="icen-slider-range" style="left:20%; right:20%"></div> <div class="icen-slider-thumb slider-thumb--lo" style="left:calc(20% - 8px)"></div> <div class="icen-slider-thumb slider-thumb--hi" style="left:calc(80% - 8px)"></div> <input class="icen-slider-native" type="range" data-icen-thumb="lo" min="0" max="100" value="20" aria-label="最小值" /> <input class="icen-slider-native" type="range" data-icen-thumb="hi" min="0" max="100" value="80" aria-label="最大值" /> </div></div>
特性
- 原理:透明原生
range覆盖层驱动填充与滑块——样式随便改,可访问性白得 - 单值:
icen-slider+icen-slider-track/-fill/-thumb+icen-slider-native - 双值:
icen-slider--dual+icen-slider-range选中段,data-icen-thumb="lo|hi"两枚原生 range - 钳制:双值保证 lo ≤ hi − step,两端不会交叉
读数回显由使用方监听原生 input 事件驱动(见演示接线)。
接口
- 初始化
initSlider()(kit 一行入口可直接命名导入)- 导出
-
initSlider - 事件
-
icen:slider-changeicen:slider-inputdetail 契约见IcenEventMap - 类型
dist/behaviors/slider.d.mts(随 npm 包发布,含全部 JSDoc 约束)
安装
bun add @icen.ai/ui pnpm add @icen.ai/ui npm install @icen.ai/ui yarn add @icen.ai/ui 一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):
import { initSlider } from '@icen.ai/ui/kit/slider';initSlider();
也可以用脚手架直接打印引入行:
bunx --bun @icen.ai/ui add slider
Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/slider.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。
用法
import { initSlider } from '@icen.ai/ui/behaviors/slider';initSlider();