#夏日挑战赛# OpenHarmony - 基于ArkUI(JS)实现色相滑块组件 原创 精华
中软小助手
发布于 2022-7-22 09:41
浏览
3收藏
作者:杨尚晓
前言
因为项目上需要,并且该组件目前还没见到社区有其他童鞋写过,所以想着自己造一下轮子,帮OpenHarmony建立生态出一份微薄之力。组件其实基本功能已经实现,但是并非最理想的,后续会进行维护更新,继续完善更多功能。
开发环境说明
- 工具版本:OpenHarmony DevEco Studio 3.0 Beta3
- SDK版本:3.0.0.901(API Version 8 Beta3)
- 组要组件:组件名称yg-slider
展示效果
属性
属性名 | 类型 | 默认值 | 作用 |
---|---|---|---|
g-color | Array | [] | 渐变色值组,eg: #ff9800 |
step | Number | 20 | 步长,g-color属性里每两渐变色之间步长,步长越大 越精准,渲染压力越大 |
show-card | Boolean | false | 是否显示滑块上方的颜色卡片 |
组件事件
属性名 | 类型 | 返回值 | 备注 |
---|---|---|---|
get-result | Function | {num:String, rgbColor:String, hexColor:String, hex:Object} | num: 当前滑块下标值, rgbColor: rgb颜色值【rgb(0,0,0)】, hex颜色值【##ff9800】,hex: R,G,B对应16进制hex值 |
调用实现
在需要引用的hml中element引入组件
js中的传参和绑定的事件
- gColor是渐变色值组,这里需要跟css样式里的一致。
- 本来尝试在内联样式绑定linear-gradient,切报错提示无法绑定渐变的内联样式
- 该问题已提Issues:https://gitee.com/openharmony/docs/issues/I5F8KC?from=project-issue
实现思路
- 根据UI写好样式。
- 绑定滑块的触摸事件
- 获取滑块条的长度和位置,和当前触摸的位置做比较,通过计算获取滑块所在的位置
- 封装获取两颜色之间的渐变值组
- 根据渐变值组总长度,设置为滑块的刻度值。
- 滑块滑动到某位置计算该位置刻度,得到渐变值组的对应色值,赋值给颜色卡片展示
实现过程
1. 根据UI写好页面和样式
ygSlider.hml页面
ygSlider.css
2. 绑定滑块的触摸事件
ygSlider.hml
ygSlider.js
在sliderStart事件里,通过getBoundingClientRect()方法获取滑块条的宽高和位置
在sliderMove事件里设置pct为滑块按钮的位置,并确保按钮不会超出滑块条
3. 封装获取两颜色之间的渐变值组的方法
封装颜色渐变之间值方法,有备注。这个方法在之前的一个组件中就开始实现了,搞好需要就拿过来修改了一下。
传送门: HarmonyOS 基于JSAPI自定义封装渐变圆环进度条组件
因为传进来的颜色组不止两个,所以做了一个循环处理
4. 根据渐变值组总长度,设置为滑块的刻度值
代码地址
#夏日挑战赛# openHarmony - 基于ArkUI(JS)实现色相滑块组件
总结
难点:逻辑都比较简单,主要难点在于就是计算两颜色值之间的渐变色值组。
和计算当前刻度,这里需要注意三个值
- 滑块按钮的当前位置 0% -100%
- 滑块条的长度,比如是320px
- 滑块的刻度
三者之间需要进行计算转换。
更多原创内容请关注:中软国际 HarmonyOS 技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
赞
7
收藏 3
回复
7
3
3
相关推荐
感谢大佬造的轮子,颜色渐变直接修改其他组件的这个思路值得学习。
向大佬学习
记笔记: