Openharmony & VCordova三方库适配1.7.0 -进度条组件
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net在跨平台开发中,进度条组件是用户界面中不可或缺的一部分。无论是文件上传、页面加载还是多步骤表单,进度条都能为用户提供直观的反馈。本文将详细介绍中进度条组件的适配过程,包括线性进度条圆形进度条步骤条等核心功能的实现与使用。在前面的版本中,我们已经完成了数据展示、图表、弹窗、日期选择、下拉菜单
前言
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
在 OpenHarmony 跨平台开发中,进度条组件是用户界面中不可或缺的一部分。无论是文件上传、页面加载还是多步骤表单,进度条都能为用户提供直观的反馈。本文将详细介绍 VCordova v1.7.0 中进度条组件的适配过程,包括线性进度条、圆形进度条、步骤条等核心功能的实现与使用。
在前面的版本中,我们已经完成了数据展示、图表、弹窗、日期选择、下拉菜单、文件上传和标签等组件的适配。本次 v1.7.0 版本重点聚焦于进度展示类组件,为开发者提供一套完整的进度解决方案。
本文基于 VCordova 三方库适配 OpenHarmony 的实践经验撰写,适合有一定前端基础的开发者阅读。
📊 一、UI 展示效果

上图展示了进度条组件在 OpenHarmony 设备上的实际运行效果,包括线性进度条、圆形进度条和步骤条三种类型。
1.1 组件概览
进度条组件是 VCordova 三方库中的重要组成部分。v1.7.0 版本提供了以下核心功能:
- 线性进度条(Line Progress)
- 圆形进度条(Circle Progress)
- 步骤条(Steps)
- 多种进度状态支持
- 动画效果
- 自定义颜色与样式
1.2 组件特性对比
| 特性 | 线性进度条 | 圆形进度条 | 步骤条 |
|---|---|---|---|
| 进度展示 | ✅ 水平条形 | ✅ 圆形环状 | ✅ 分步展示 |
| 百分比显示 | ✅ 支持 | ✅ 支持 | ❌ 不适用 |
| 动画效果 | ✅ 支持 | ✅ 支持 | ❌ 不支持 |
| 自定义颜色 | ✅ 支持 | ✅ 支持 | ✅ 支持 |
| 状态切换 | ✅ 四种状态 | ✅ 四种状态 | ✅ 三种状态 |
| 适用场景 | 文件上传、加载 | 仪表盘、卡片 | 表单流程、向导 |
提示:根据实际业务场景选择合适的进度条类型,线性进度条适合宽屏展示,圆形进度条适合紧凑布局。
二、快速上手
2.1 引入文件
使用进度条组件前,需要先引入对应的 CSS 和 JS 文件:
<link rel="stylesheet" href="components/progress/progress.css">
<script src="components/progress/progress.js"></script>
CSS 文件包含进度条组件的所有样式定义,JS 文件包含 Progress 类和 Steps 类的完整实现。
2.2 创建容器
进度条组件需要一个 HTML 容器元素来挂载:
<div id="progressContainer"></div>
容器可以是任何 HTML 元素,只需要设置一个唯一的 id 属性即可。组件会自动在容器内渲染进度条。
2.3 初始化进度条
通过创建 Progress 实例来初始化进度条组件:
const progress = new Progress({
container: '#progressContainer',
type: 'line',
percent: 65,
status: 'normal'
});
初始化配置参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| container | String | 必填 | 容器选择器,支持 CSS 选择器语法 |
| type | String | ‘line’ | 进度条类型,可选 ‘line’ 或 ‘circle’ |
| percent | Number | 0 | 初始进度百分比,范围 0-100 |
| status | String | ‘normal’ | 进度状态,可选 normal/success/warning/error |
| animated | Boolean | false | 是否启用动画效果 |
| color | String | null | 自定义颜色,支持 CSS 颜色值 |
| showText | Boolean | true | 是否显示百分比文字 |
2.4 快速上手示例
下面是一个完整的快速上手示例,展示如何在页面中创建一个基本的进度条:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="components/progress/progress.css">
</head>
<body>
<div id="myProgress"></div>
<button onclick="updateProgress()">更新进度</button>
<script src="components/progress/progress.js"></script>
<script>
const progress = new Progress({
container: '#myProgress',
type: 'line',
percent: 0,
status: 'normal',
animated: true
});
function updateProgress() {
const current = progress.getPercent();
if (current < 100) {
progress.setPercent(current + 10);
}
if (current + 10 >= 100) {
progress.setStatus('success');
}
}
</script>
</body>
</html>
上述代码创建了一个带动画效果的线性进度条,点击按钮每次增加 10% 的进度,当进度达到 100% 时自动切换为成功状态。
三、线性进度条详解
线性进度条是最常用的进度展示方式,以水平条形展示当前进度。
3.1 创建线性进度条
const lineProgress = new Progress({
container: '#lineProgress',
type: 'line',
percent: 65,
status: 'normal'
});
线性进度条会渲染一个水平的进度条,右侧显示当前百分比数值。进度条的宽度会根据容器自适应。
3.2 更新进度值
通过 API 方法可以动态更新进度:
// 设置进度为 80%
lineProgress.setPercent(80);
// 获取当前进度值
const currentPercent = lineProgress.getPercent();
console.log('当前进度:' + currentPercent + '%');
// 重置进度
lineProgress.setPercent(0);
setPercent() 方法接受 0-100 之间的数值。调用后进度条会平滑过渡到新的值,提供流畅的视觉体验。
3.3 线性进度条适用场景
线性进度条适合以下场景:
- 文件上传/下载进度展示
- 页面或资源加载进度
- 表单填写完成度
- 任务执行进度跟踪
注意:线性进度条在宽度较小的容器中可能显示不完整,建议容器最小宽度不低于 200px。
四、圆形进度条详解
圆形进度条以环形方式展示进度,适合在空间有限的区域使用。
4.1 创建圆形进度条
const circleProgress = new Progress({
container: '#circleProgress',
type: 'circle',
percent: 75,
status: 'success'
});
圆形进度条会渲染一个圆形的进度环,百分比数值显示在圆心位置。
4.2 圆形进度条与线性进度条对比
| 对比项 | 线性进度条 | 圆形进度条 |
|---|---|---|
| 占用空间 | 宽度大,高度小 | 等宽等高,较紧凑 |
| 视觉效果 | 直观,适合精确展示 | 美观,适合概览展示 |
| 适用布局 | 列表、表单 | 卡片、仪表盘 |
| 百分比位置 | 进度条右侧 | 圆心位置 |
| 渲染方式 | CSS width | SVG 或 Canvas |
4.3 圆形进度条适用场景
圆形进度条特别适合以下场景:
- 仪表盘数据展示
- 用户头像旁的完成度指示
- 卡片式布局中的进度展示
- 移动端紧凑型界面
五、进度状态管理
进度条支持四种状态,每种状态对应不同的颜色和含义。
5.1 四种状态示例
// 正常状态 - 蓝色
const normalProgress = new Progress({
container: '#normal',
type: 'line',
percent: 50,
status: 'normal'
});
// 成功状态 - 绿色
const successProgress = new Progress({
container: '#success',
type: 'line',
percent: 100,
status: 'success'
});
// 警告状态 - 橙色
const warningProgress = new Progress({
container: '#warning',
type: 'line',
percent: 75,
status: 'warning'
});
// 错误状态 - 红色
const errorProgress = new Progress({
container: '#error',
type: 'line',
percent: 30,
status: 'error'
});
5.2 状态详细说明
每种状态都有明确的语义和视觉表现:
- normal — 正常进行中状态,使用蓝色(#409EFF),表示任务正在执行
- success — 成功完成状态,使用绿色(#67C23A),表示任务已完成
- warning — 警告状态,使用橙色(#E6A23C),表示需要注意
- error — 错误状态,使用红色(#F56C6C),表示任务失败
5.3 动态切换状态
可以通过 API 动态切换进度条的状态:
// 切换到成功状态
progress.setStatus('success');
// 切换到错误状态
progress.setStatus('error');
// 获取当前状态
const currentStatus = progress.getStatus();
提示:状态切换时进度条颜色会平滑过渡,不会出现突兀的颜色跳变。
六、动画效果配置
进度条支持丰富的动画效果,提升用户体验。
6.1 启用动画
const animatedProgress = new Progress({
container: '#animatedProgress',
type: 'line',
percent: 50,
animated: true
});
设置 animated: true 启用动画效果后,进度条会呈现呼吸效果,即进度条内部会有一个从左到右的流光动画。
6.2 禁用动画
const staticProgress = new Progress({
container: '#staticProgress',
type: 'line',
percent: 50,
animated: false
});
设置 animated: false 禁用动画效果,进度条将保持静态显示。在性能敏感的场景下建议禁用动画。
6.3 动画效果的 CSS 实现
进度条的动画效果通过 CSS 实现,核心代码如下:
/* 进度条动画效果 */
.progress-bar-inner {
transition: width 0.3s ease;
position: relative;
overflow: hidden;
}
.progress-bar-inner.animated::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
90deg,
transparent,
rgba(255, 255, 255, 0.3),
transparent
);
animation: progress-flow 2s infinite;
}
@keyframes progress-flow {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
这段 CSS 代码实现了进度条的平滑过渡和流光动画效果。transition 属性确保进度值变化时的平滑过渡,@keyframes 定义了流光动画。
七、自定义颜色与样式
进度条支持高度自定义,满足不同设计需求。
7.1 设置自定义颜色
// 使用十六进制颜色
const customProgress1 = new Progress({
container: '#custom1',
type: 'line',
percent: 65,
color: '#ff6b6b'
});
// 使用 RGB 颜色
const customProgress2 = new Progress({
container: '#custom2',
type: 'circle',
percent: 80,
color: 'rgb(106, 90, 205)'
});
color 属性支持任何合法的 CSS 颜色值,包括十六进制、RGB、RGBA、HSL 等格式。
7.2 隐藏百分比文字
在某些设计场景下,可能不需要显示百分比数值:
const noTextProgress = new Progress({
container: '#noText',
type: 'line',
percent: 65,
showText: false
});
设置 showText: false 即可隐藏百分比文字,进度条将只显示进度条本身。
7.3 自定义样式覆盖
除了使用组件提供的配置项,还可以通过 CSS 覆盖默认样式:
/* 自定义进度条高度 */
.progress-bar {
height: 20px;
border-radius: 10px;
}
/* 自定义进度条背景色 */
.progress-bar-outer {
background-color: #f0f0f0;
}
/* 自定义百分比文字样式 */
.progress-text {
font-size: 14px;
font-weight: bold;
color: #333;
}
通过 CSS 覆盖可以实现更精细的样式控制,满足各种设计规范的要求。
八、步骤条组件
步骤条用于展示多步骤流程,是进度条组件的重要补充。
8.1 创建步骤条
const steps = new Steps({
container: '#stepsContainer',
steps: [
{ title: '第一步', description: '填写基本信息' },
{ title: '第二步', description: '确认订单详情' },
{ title: '第三步', description: '支付完成' }
],
current: 1
});
步骤条会渲染多个步骤节点,当前步骤会高亮显示,已完成的步骤会显示对勾图标。
8.2 步骤对象属性
每个步骤是一个配置对象,支持以下属性:
| 属性 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| title | String | 是 | 步骤标题,显示在步骤节点下方 |
| description | String | 否 | 步骤描述,显示在标题下方 |
| icon | String | 否 | 自定义图标类名 |
| status | String | 否 | 单独设置步骤状态 |
8.3 步骤条适用场景
步骤条适合以下业务场景:
- 注册/登录流程引导
- 订单提交多步骤表单
- 新手引导向导
- 审批流程展示
九、步骤导航与交互
步骤条提供了丰富的导航 API,支持灵活的步骤切换。
9.1 步骤导航 API
// 设置当前步骤(从 0 开始计数)
steps.setCurrent(1);
// 前进到下一步
steps.next();
// 返回上一步
steps.prev();
// 获取当前步骤索引
const currentIndex = steps.getCurrent();
console.log('当前步骤:' + currentIndex);
9.2 步骤导航完整示例
下面是一个结合按钮的步骤导航完整示例:
<div id="stepsDemo"></div>
<div class="step-buttons">
<button id="prevBtn" onclick="goPrev()">上一步</button>
<button id="nextBtn" onclick="goNext()">下一步</button>
</div>
<script>
const stepsDemo = new Steps({
container: '#stepsDemo',
steps: [
{ title: '选择商品', description: '浏览并选择商品' },
{ title: '填写地址', description: '填写收货地址' },
{ title: '确认支付', description: '选择支付方式' },
{ title: '完成', description: '订单提交成功' }
],
current: 0
});
function goNext() {
if (stepsDemo.getCurrent() < 3) {
stepsDemo.next();
}
}
function goPrev() {
if (stepsDemo.getCurrent() > 0) {
stepsDemo.prev();
}
}
</script>
用户可以通过点击"上一步"和"下一步"按钮在步骤之间导航,也可以直接点击步骤节点进行跳转。
9.3 步骤点击事件
步骤条支持点击事件回调:
const steps = new Steps({
container: '#stepsContainer',
steps: [...],
current: 0,
onChange: function(currentIndex, prevIndex) {
console.log('从步骤 ' + prevIndex + ' 切换到步骤 ' + currentIndex);
}
});
onChange 回调函数会在步骤切换时触发,接收当前步骤索引和上一步骤索引两个参数。
十、步骤状态与方向
步骤条支持多种状态和布局方向。
10.1 步骤状态类型
const steps = new Steps({
container: '#stepsContainer',
steps: [
{ title: '步骤一', description: '已完成' },
{ title: '步骤二', description: '进行中' },
{ title: '步骤三', description: '待处理' }
],
current: 1,
status: 'process'
});
步骤条支持三种状态:
- process — 处理中,当前步骤显示加载动画
- finish — 已完成,当前步骤显示对勾图标
- error — 错误,当前步骤显示叉号图标
10.2 水平步骤条
const horizontalSteps = new Steps({
container: '#horizontalSteps',
steps: [
{ title: '开始', description: '项目启动' },
{ title: '开发', description: '功能开发' },
{ title: '测试', description: '质量验证' },
{ title: '上线', description: '正式发布' }
],
direction: 'horizontal',
current: 2
});
水平步骤条适合在宽屏设备上使用,步骤节点从左到右排列。
10.3 垂直步骤条
const verticalSteps = new Steps({
container: '#verticalSteps',
steps: [
{ title: '提交申请', description: '填写申请表单' },
{ title: '部门审批', description: '等待部门经理审批' },
{ title: 'HR审批', description: '等待HR审批' },
{ title: '完成', description: '审批通过' }
],
direction: 'vertical',
current: 1
});
垂直步骤条适合在窄屏或移动设备上使用,步骤节点从上到下排列。在侧边栏或移动端页面中效果更佳。
十一、OpenHarmony 适配要点
在将进度条组件适配到 OpenHarmony 平台时,需要注意以下关键点。
11.1 适配注意事项
在 OpenHarmony 环境下使用进度条组件,需要关注以下几个方面:
- CSS 动画兼容性:确保
@keyframes和transition在 OpenHarmony WebView 中正常工作 - SVG 渲染:圆形进度条依赖 SVG 渲染,需确认 WebView 的 SVG 支持
- 触摸事件:步骤条的点击交互需要适配触摸事件
- 性能优化:在低端设备上建议禁用动画效果
11.2 适配代码示例
针对 OpenHarmony 平台的适配代码:
// OpenHarmony 环境检测
function isOpenHarmony() {
return typeof window !== 'undefined' &&
navigator.userAgent.indexOf('OpenHarmony') > -1;
}
// 根据平台调整配置
const progressConfig = {
container: '#progress',
type: 'line',
percent: 50,
animated: !isOpenHarmony() || isHighPerformanceDevice(),
status: 'normal'
};
const progress = new Progress(progressConfig);
11.3 已适配组件清单
截至 v1.7.0 版本,VCordova 三方库已适配的组件如下:
| 版本 | 组件 | 状态 |
|---|---|---|
| v1.0.0 | 基础数据展示 | ✅ 已完成 |
| v1.1.0 | 图表组件 | ✅ 已完成 |
| v1.2.0 | 弹窗组件 | ✅ 已完成 |
| v1.3.0 | 日期选择器 | ✅ 已完成 |
| v1.4.0 | 下拉菜单 | ✅ 已完成 |
| v1.5.0 | 文件上传 | ✅ 已完成 |
| v1.6.0 | 标签组件 | ✅ 已完成 |
| v1.7.0 | 进度条组件 | ✅ 已完成 |
| v1.8.0 | 加载动画 | 🔜 开发中 |
| v1.9.0 | 分页组件 | 📋 计划中 |
十二、完整 API 参考
12.1 Progress 类 API
以下是 Progress 类的完整 API 列表:
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| setPercent(value) | Number (0-100) | void | 设置进度百分比 |
| getPercent() | 无 | Number | 获取当前进度百分比 |
| setStatus(status) | String | void | 设置进度状态 |
| getStatus() | 无 | String | 获取当前状态 |
| setColor(color) | String | void | 设置自定义颜色 |
| destroy() | 无 | void | 销毁组件实例 |
12.2 Steps 类 API
以下是 Steps 类的完整 API 列表:
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| setCurrent(index) | Number | void | 设置当前步骤 |
| getCurrent() | 无 | Number | 获取当前步骤索引 |
| next() | 无 | void | 前进到下一步 |
| prev() | 无 | void | 返回上一步 |
| setStatus(status) | String | void | 设置步骤状态 |
| destroy() | 无 | void | 销毁组件实例 |
12.3 配置项速查
Progress 组件完整配置项:
const progress = new Progress({
// 必填项
container: '#container', // 容器选择器
// 可选项
type: 'line', // 类型:'line' | 'circle'
percent: 0, // 初始进度:0-100
status: 'normal', // 状态:'normal' | 'success' | 'warning' | 'error'
animated: false, // 是否启用动画
color: null, // 自定义颜色
showText: true // 是否显示百分比文字
});
Steps 组件完整配置项:
const steps = new Steps({
// 必填项
container: '#container', // 容器选择器
steps: [], // 步骤数组
// 可选项
current: 0, // 当前步骤索引
direction: 'horizontal', // 方向:'horizontal' | 'vertical'
status: 'process', // 状态:'process' | 'finish' | 'error'
onChange: null // 步骤切换回调函数
});
十三、常见问题与解决方案
13.1 进度条不显示
如果进度条没有正常显示,请检查以下几点:
- 确认 CSS 文件已正确引入
- 确认容器元素存在且 ID 正确
- 确认 JS 文件加载顺序正确(CSS 在 JS 之前)
- 检查浏览器控制台是否有报错信息
13.2 动画卡顿
在低端设备上动画可能出现卡顿,解决方案:
- 禁用动画效果:设置
animated: false - 减少页面中同时存在的进度条数量
- 使用
will-changeCSS 属性优化渲染性能
.progress-bar-inner {
will-change: width;
transform: translateZ(0);
}
13.3 圆形进度条尺寸异常
圆形进度条的尺寸取决于容器的宽高,确保容器设置了明确的宽高:
#circleContainer {
width: 120px;
height: 120px;
}
提示:圆形进度条的容器建议设置为等宽等高的正方形,以获得最佳显示效果。
十四、最佳实践建议
14.1 性能优化建议
在实际项目中使用进度条组件时,建议遵循以下最佳实践:
- 避免在同一页面创建过多的进度条实例(建议不超过 10 个)
- 不再使用的进度条实例及时调用
destroy()方法销毁 - 在列表或表格中使用进度条时,考虑使用虚拟滚动
- 频繁更新进度时,使用
requestAnimationFrame节流
14.2 无障碍访问
进度条组件内置了基本的无障碍支持:
<!-- 组件自动生成的无障碍属性 -->
<div role="progressbar"
aria-valuenow="65"
aria-valuemin="0"
aria-valuemax="100"
aria-label="进度:65%">
</div>
组件会自动添加 role="progressbar" 和相关的 ARIA 属性,确保屏幕阅读器能够正确识别和朗读进度信息。
14.3 与其他组件配合使用
进度条组件可以与 VCordova 的其他组件配合使用:
- 与文件上传组件配合,展示上传进度
- 与弹窗组件配合,在弹窗中展示加载进度
- 与表格组件配合,在表格列中展示数据占比
总结
VCordova v1.7.0 进度条组件完成了进度展示和步骤流程的全部功能适配。结合前面版本已适配的组件,现在我们拥有了涵盖数据展示、交互、输入、选择、上传、标签和进度的完整解决方案。
进度条组件的设计遵循简洁、高效、易用的理念,提供了线性进度条和圆形进度条两种类型,支持四种状态、动画效果、自定义颜色等丰富功能。同时提供步骤条组件,满足多步骤流程的展示需求。
后续版本将继续添加更多组件。下一个版本 v1.8.0 将带来加载动画组件,之后还有分页、轮播等组件。每个组件都将遵循同样的设计理念,为 OpenHarmony 跨平台开发提供开箱即用的 UI 解决方案。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- OpenHarmony 适配仓库:VCordova OpenHarmony 适配
- 开源鸿蒙跨平台社区:OpenHarmony 跨平台社区
- OpenHarmony 官方文档:OpenHarmony 开发指南
- VCordova 组件库文档:NutpiDesign 组件文档
- CSDN 技术社区:CSDN 开发者社区
- OpenHarmony 三方库中心仓:OpenHarmony 三方库
- Apache Cordova 官方文档:Cordova Documentation
- MDN Web 文档 - 进度条:MDN Progress Element
更多推荐
所有评论(0)