HarmonyOS - 基于ArkUI(JS)实现自定义circle进度条 原创 精华
中软国际鸿蒙生态
发布于 2022-9-5 11:22
1.8w浏览
3收藏
作者:张前霞
前言
最近在FA项目开发中,遇到类似这样的圆形进度条,参考开发文档利用canvas封装成了一个组件,这是一个基于JS扩展的类Web开发范式组件中的基础组件 。
组件介绍
circle进度条组件在开发中经常用到,形式多种多样,参考canvas文档做了简单的一种,支持各种属性调整。有需要可以参考看看。
代码演示
- 默认普通展示
- 显示百分比文字
- 自定义宽度
- 自定义颜色
- 自定义渐变颜色
- 自定义背景颜色
- 自定义绘制方向
注意:
父子组件属性使用:camelCase (驼峰命名法) 的 prop 名,在外部父组件传递参数时需要使用 kebab-case (短横线分隔命名) 形式,即当属性compProp在父组件引用时需要转换为comp-prop。
API
props
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
percent | 进度条百分比 | Number | 50 |
colorNum | 颜色值,1:纯色 2: 渐变色 | String | - |
bgWidth | 背景圈的宽度 | Number | 10 |
fWidth | 动态圈的宽度 | Number | 10 |
istext | 显示百分比文字 | Boolean | false |
direction | 绘制方向,顺时针false/逆时针true | Boolean | false |
bgColor | 背景圈颜色 | String | ‘#cccccc’ |
部分代码展示
1. html部分
2. js部分
相关api参考
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
lineCap | string | ‘butt’ | 指定线端点的样式,可选值为:- ‘butt’:线端点以方形结束。- ‘round’:线端点以圆形结束。- ‘square’:线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。 |
strokeStyle | <color> | CanvasGradient | CanvasPattern | - | 设置描边的颜色。- 类型为<color>时,表示设置描边使用的颜色。- 类型为CanvasGradient时,表示渐变对象,使用createLinearGradient方法创建。- 类型为CanvasPattern时,使用createPattern方法创建。 |
font | string | ‘normal normal 14px sans-serif’ | 设置文本绘制中的字体样式。语法:ctx.font=‘font-size font-family’- font-size(可选),指定字号和行高,单位只支持px。- font-family(可选),指定字体系列。语法:ctx.font=‘font-style font-weight font-size font-family’- font-style(可选),用于指定字体样式,支持如下几种样式:‘normal’,talic。- font-weight(可选),用于指定字体的粗细,支持如下几种类型:‘normal’, ‘bold’, ‘bolder’, ‘lighter’, 100, 200, 300, 400, 500, 600, 700, 800, 900。- font-size(可选),指定字号和行高,单位只支持px。- font-family(可选),指定字体系列,支持如下几种类型:‘sans-serif’, ‘serif’, ‘monospace’。 |
- 封装组件在onshow()周期内绘制显示不出动画图像,修改为onpageshow()绘制成功,延迟200毫秒画布绘制要在页面展示后才能绘制
- 获取canvas绘制图像的宽高值,无法直接获取,需使用getBoundingClientRect()方法 ;这里绘制的中心点,以画布的中点为中心
- 绘制圆圈的半径主要以画布的宽度和线圈宽度有关,这里没有把宽度作为props属性值传参进来,使用修改可直接修改画布大小,半径为画布宽度一半减去线圈宽度,结尾形状取值参考
- 进度条填充颜色可自定义选择,colornums取值1为纯色对应传Color_C的颜色值,colornums取值为2为渐变色需传入开始颜色start_C和结束颜色end_C两个颜色值
- 文字绘制相关api参考,组件百分比文字显示作为可选项,需要显示时传入istext字段即可。
- 在最后执行动画这块做了一个文字百分比的动态增加,这块有一点点的小问题文字动态增加过程中会出现绘制闪动的问题,目前尚未解决,但是不影响正常使用。后续会逐步更新解决。
总结
此自定义组件运用了canvas绘制,使用和练习中参考官方api,也结合了组件通信,父子组件直接的传值。
缺点是不支持拖动事件,在事件这部分没有做添加,后续在更新中也欢迎其他朋友多多指点。
更多原创内容请关注:中软国际 HarmonyOS 技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-9-5 14:47:35修改
赞
6
收藏 3
回复
6
7
3
相关推荐
进度条的图片是不是没上传成功?
漏了,感谢提醒,已补上
ok,可以看到了,感谢修改。
api的演示很详细
能自己设置的东西总是最好的
进度条组件的现状和缺点都讲的很清楚,希望后续能添加拖动事件吧。
求源码 蟹蟹