在 uni-app x 的鸿蒙端开发中,slider 是处理音量、亮度、价格区间筛选等数值选择的常用组件。HarmonyOS 4.61 起开始支持该组件。它在鸿蒙平台采用原生实现,对应 HarmonyOS 的 Slider 组件,因此滑动动画流畅、系统风格一致。本文围绕属性、事件、典型场景和鸿蒙适配踩坑,整理一份可落地的使用笔记。
组件定位与基础用法
slider 本质是左右拖动选择数值的滑块。用户按住滑块左右拖动时触发 @changing,松手后触发 @change。最简用法如下:- <template>
- <slider :value="50" @change="onChange"></slider>
- </template>
- <script setup lang="uts">
- const onChange = (event: UniSliderChangeEvent) => {
- console.log('当前值:', event.detail.value)
- }
- </script>
复制代码 核心属性包括 value、min、max、step、show-value、disabled;样式相关属性包括 activeBackgroundColor、backgroundColor、foreColor、block-size。事件方面,@change 只在松手后触发一次,@changing 会在拖动过程中持续触发。
典型使用场景
基础滑块只需要绑定 value 并监听 @change;需要显示当前值时加上 :show-value="true";需要固定步进时设置 :step,例如 0 到 100 步进 10,滑块只会停在 0、10、20、30 等位置。step 也支持小数,例如价格范围 0 到 1、步进 0.01。自定义样式可通过 activeBackgroundColor、backgroundColor、foreColor 和 block-size 组合完成:- <slider :value="value"
- activeBackgroundColor="#FF5722"
- backgroundColor="#E0E0E0"
- foreColor="#FF5722"
- :block-size="24"
- @change="onChange">
- </slider>
复制代码 如果要做实时预览,应同时监听 @changing 和 @change;音量、亮度控制这类场景,可以配合 min=0、max=100、show-value=true 使用。禁用状态直接加 disabled 即可。
鸿蒙原生实现与对比
鸿蒙平台上的 uni-app x slider 使用原生实现,对应 HarmonyOS 原生 Slider 组件。原生写法大致如下:- Slider({
- value: 50,
- min: 0,
- max: 100,
- step: 1,
- style: SliderStyle.OutSet
- })
- .blockColor('#ffffff')
- .trackColor('#e9e9e9')
- .selectedColor('#007aff')
- .onChange((value: number) => {
- console.log('当前值:', value)
- })
复制代码 从写法上看,uni-app x 的 slider 属性命名更简洁、更直观;同时因为底层是原生实现,滑动体验和动画流畅度较好,在滚动容器中拖动 slider 时平台也会处理部分滑动冲突。
鸿蒙适配踩坑
1. block-size 取值范围为 12-28,不能随意设置。设太小不好点按,设太大超出范围会被截断。- <!-- 正确 -->
- <slider :block-size="24"></slider>
- <!-- 错误:超出范围 -->
- <slider :block-size="35"></slider>
复制代码 2. App 端 show-value 最多显示 4 位数字,最大 9999。如果 max 很大,超出 4 位的数字会被截断。解决方案是把 show-value 设为 false,再自己用 text 组件绑定 value 显示:- <view style="flex-direction: row; align-items: center;">
- <slider :value="value" :show-value="false" style="flex: 1;"></slider>
- <text style="width: 60px; text-align: right;">{{value}}</text>
- </view>
复制代码 3. activeColor 和 block-color 已废弃,应分别替换为 activeBackgroundColor 和 foreColor,继续使用会有警告。
4. step 要大于 0,并且要和 (max - min) 保持整除关系。例如 min=0、max=100 时 step=10 是正确的;step=7 这种不能整除 max - min 的写法不推荐,否则不同平台行为不一致:Android 和 Web 滑不到最末端,iOS 会四舍五入。
5. @change 是松手后触发一次,@changing 是拖动过程中持续触发。实时预览用 @changing,最终确认用 @change,不要混用,否则可能带来性能问题。
6. slider 实际占用高度比看到的大。默认高度约为 block-size + 阴影(4px * 2)+ margin,大约 38px。如果外层套了固定高度容器,可能会被裁剪。
7. 在 scroll-view 中放 slider,拖动 slider 时可能触发 scroll-view 滚动。鸿蒙平台优化了这个问题:当水平拖动超过一定距离后会阻止默认行为。更稳妥的做法是在 slider 区域使用 @touchmove.stop 阻止冒泡。
小结
在鸿蒙 uni-app x 中使用 slider,重点记住这些边界:block-size 为 12-28;show-value 最多 4 位数字;activeColor 和 block-color 已废弃;step 要与 (max - min) 保持整除关系;change 与 changing 分别对应确认和实时拖动;HarmonyOS 4.61 起支持;滚动容器内注意滑动冲突。把这些细节处理好,slider 就能稳定用于音量、亮度、价格筛选等数值选择场景。 |