news 2026/6/15 16:22:07

Cordova与OpenHarmony目标进度可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cordova与OpenHarmony目标进度可视化

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

数据可视化的重要性

目标进度的可视化展示能够让用户更直观地了解自己的运动成果。通过Cordova框架与OpenHarmony的图表库,我们可以创建多种形式的进度展示。本文将介绍如何实现这一功能。

进度条组件

classProgressBar{constructor(containerId,options){this.container=document.getElementById(containerId);this.options={width:options.width||300,height:options.height||20,color:options.color||'#4ECDC4',backgroundColor:options.backgroundColor||'#E0E0E0'};}render(progress){constpercentage=Math.min(progress,100);this.container.innerHTML=`<div class="progress-bar-wrapper" style="width:${this.options.width}px; height:${this.options.height}px; background-color:${this.options.backgroundColor}; border-radius: 10px; overflow: hidden;"> <div class="progress-bar-fill" style="width:${percentage}%; height: 100%; background-color:${this.options.color}; transition: width 0.3s ease;"></div> </div> <div class="progress-text">${percentage.toFixed(1)}%</div>`;}}

ProgressBar类提供了一个可配置的进度条组件。通过options参数,用户可以自定义进度条的宽度、高度和颜色。render方法根据进度百分比动态更新进度条的宽度。这种组件化的设计使得代码更加可复用。

圆形进度指示器

functionrenderCircularProgress(goal){constcanvas=document.getElementById('circular-progress');constctx=canvas.getContext('2d');constradius=50;constcircumference=2*Math.PI*radius;constprogress=(goal.progress/100)*circumference;// 绘制背景圆ctx.beginPath();ctx.arc(60,60,radius,0,2*Math.PI);ctx.strokeStyle='#E0E0E0';ctx.lineWidth=8;ctx.stroke();// 绘制进度圆ctx.beginPath();ctx.arc(60,60,radius,-Math.PI/2,-Math.PI/2+(progress/circumference)*2*Math.PI);ctx.strokeStyle='#4ECDC4';ctx.lineWidth=8;ctx.stroke();// 绘制文字ctx.fillStyle='#333';ctx.font='bold 24px Arial';ctx.textAlign='center';ctx.textBaseline='middle';ctx.fillText(`${goal.progress.toFixed(0)}%`,60,60);}

圆形进度指示器提供了一种更加美观的进度展示方式。这个函数使用Canvas绘制一个圆形进度条,中心显示百分比。这种设计特别适合在仪表板上展示单个目标的进度。

多目标对比图表

functionrenderGoalComparison(goals){constchartData={labels:goals.map(g=>g.name),datasets:[{label:'完成进度',data:goals.map(g=>g.progress),backgroundColor:['#FF6B6B','#4ECDC4','#45B7D1','#FFA07A','#98D8C8'],borderColor:'#fff',borderWidth:2}]};renderBarChart('goal-comparison',chartData);}

多目标对比图表让用户能够一目了然地看到所有目标的进度。这个函数准备了柱状图数据,每个目标对应一个柱子。通过不同的颜色区分不同的目标,使得图表更加清晰易读。

时间线进度展示

functionrenderProgressTimeline(goal){consttimeline=document.getElementById('progress-timeline');constmilestones=calculateMilestones(goal);lettimelineHTML='<div class="timeline">';milestones.forEach((milestone,index)=>{constisCompleted=goal.currentValue>=milestone.value;conststatus=isCompleted?'completed':'pending';timelineHTML+=`<div class="timeline-item${status}"> <div class="timeline-marker"></div> <div class="timeline-content"> <div class="milestone-label">${milestone.label}</div> <div class="milestone-value">${milestone.value}${getUnitForType(goal.type)}</div> <div class="milestone-date">${formatDate(milestone.date)}</div> </div> </div>`;});timelineHTML+='</div>';timeline.innerHTML=timelineHTML;}functioncalculateMilestones(goal){constmilestones=[];conststep=goal.targetValue/4;for(leti=1;i<=4;i++){milestones.push({value:step*i,label:`里程碑${i}`,date:newDate(goal.createdAt+(i*(goal.deadline-goal.createdAt)/4))});}returnmilestones;}

时间线进度展示将目标分解为多个里程碑,展示用户的进度路径。这个函数计算了四个等间距的里程碑,并根据用户的当前进度标记完成状态。这种展示方式能够让用户看到自己的进度轨迹。

热力图展示

functionrenderActivityHeatmap(workoutData){constheatmapContainer=document.getElementById('activity-heatmap');constweeks=12;constdaysPerWeek=7;letheatmapHTML='<div class="heatmap">';for(letweek=0;week<weeks;week++){heatmapHTML+='<div class="heatmap-week">';for(letday=0;day<daysPerWeek;day++){constdate=newDate();date.setDate(date.getDate()-(weeks*7-week*7-day));constdateStr=date.toISOString().split('T')[0];constactivity=workoutData[dateStr]||0;constintensity=getIntensityLevel(activity);heatmapHTML+=`<div class="heatmap-cell intensity-${intensity}" title="${dateStr}:${activity}次运动"></div>`;}heatmapHTML+='</div>';}heatmapHTML+='</div>';heatmapContainer.innerHTML=heatmapHTML;}functiongetIntensityLevel(activity){if(activity===0)return'none';if(activity<1)return'low';if(activity<2)return'medium';if(activity<3)return'high';return'very-high';}

热力图展示提供了一个长期的运动活动概览。这个函数创建了一个12周的热力图,每个格子代表一天的运动活动。通过不同的颜色强度表示运动频率,用户可以直观地看到自己的运动规律。

目标达成率统计

functioncalculateGoalAchievementRate(allGoals){conststats={totalGoals:allGoals.length,completedGoals:0,inProgressGoals:0,overdueGoals:0,achievementRate:0};allGoals.forEach(goal=>{if(goal.status==='completed'){stats.completedGoals++;}elseif(goal.isOverdue()){stats.overdueGoals++;}else{stats.inProgressGoals++;}});stats.achievementRate=(stats.completedGoals/stats.totalGoals)*100;returnstats;}

目标达成率统计提供了用户目标完成情况的概览。这个函数计算了完成、进行中和逾期的目标数量,以及总体的达成率。这种统计能够帮助用户了解自己的目标管理效果。

总结

目标进度可视化通过Cordova与OpenHarmony的结合,提供了多种形式的进度展示方式。从进度条到圆形指示器,从时间线到热力图,这些可视化工具能够帮助用户更直观地了解自己的运动进度。通过这些展示方式,用户能够更好地跟踪自己的目标完成情况,保持运动的动力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:48:18

SVG 多边形

SVG 多边形 SVG(可缩放矢量图形)是一种基于可缩放矢量图形的图形和图像的文件格式,它可以用于网页设计、动画制作以及图表展示等领域。在SVG中,多边形是一个非常基础且强大的图形元素。本文将详细介绍SVG多边形的定义、属性、创建方法以及在实际应用中的使用技巧。 一、S…

作者头像 李华
网站建设 2026/6/15 11:49:55

10_C 语言进阶之避坑指南:浮点数与精度损失—— 不可思议的 “量化误差”

C 语言进阶之避坑指南:浮点数与精度损失—— 不可思议的 “量化误差” 浮点数是 C 语言中处理小数、科学计数法数值的核心类型,看似简单的float和double,却暗藏大量容易被忽视的陷阱 —— 从精度丢失导致的计算错误,到浮点数比较的逻辑漏洞,再到嵌入式环境下的浮点运算支…

作者头像 李华
网站建设 2026/6/15 15:36:30

通信系统仿真:通信系统基础理论_(2).信号与系统

信号与系统 信号的分类 在通信系统中,信号是信息传递的基本载体。根据不同的特性,信号可以分为多种类型。了解信号的分类是进行通信系统仿真和分析的基础。 连续时间信号与离散时间信号 连续时间信号是指在时间上连续变化的信号,可以用数学函数 x(t)x(t)x(t) 表示,其中…

作者头像 李华
网站建设 2026/6/15 11:47:48

网易Java面试被问:偏向锁在什么场景下反而降低性能?如何关闭?

偏向锁性能问题详解 一、偏向锁的工作原理与性能隐患 1. 偏向锁设计初衷 java // 偏向锁的核心思想&#xff1a;大多数情况下锁不存在竞争 public class BiasedLockDesign {/*假设场景&#xff1a;单线程重复获取同一把锁无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁偏…

作者头像 李华
网站建设 2026/6/15 12:39:49

【ros2】ROS2中激光雷达/IMU/深度相机配置与RViz可视化全指南

文章目录 激光雷达/IMU/深度相机配置与RViz可视化全指南 一、文档概述 二、前置准备 2.1 环境与依赖 2.2 功能包与目录结构 三、传感器配置步骤(URDF/Xacro) 3.1 激光雷达(LiDAR)配置 3.1.1 编写Xacro配置文件 3.1.2 关键参数说明 3.2 惯性测量单元(IMU)配置 3.2.1 在Xac…

作者头像 李华