news 2026/6/7 10:08:26

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/6 21:28:23

一阶鬼魔魔方

目录 一阶鬼魔魔方 1&#xff0c;魔方三要素 &#xff08;1&#xff09;组成部件 &#xff08;2&#xff09;可执行操作 A套餐&#xff08;用于魔方分类、魔方打乱&#xff09; &#xff08;3&#xff09;可执行操作 B套餐&#xff08;用于魔方复原&#xff09; &#xf…

作者头像 李华
网站建设 2026/6/7 3:50:58

基于Spring Boot的人力资源管理信息系统

基于Spring Boot的人力资源管理信息系统介绍 一、系统定位与用户需求分析 核心目标&#xff1a;随着信息化时代的到来&#xff0c;企业对于人力资源管理的需求日益增加&#xff0c;传统的人力资源管理方式存在工作效率低、工作繁杂等问题&#xff0c;已无法满足现代企业的需求。…

作者头像 李华
网站建设 2026/5/31 13:15:09

ECharts 事件处理

ECharts 事件处理 引言 ECharts 是一个使用 JavaScript 实现的开源可视化库,广泛用于数据可视化。在 ECharts 中,事件处理是一个重要的功能,它允许开发者根据用户的交互动态更新图表。本文将详细介绍 ECharts 事件处理的各个方面,包括事件类型、监听方法以及实际应用案例…

作者头像 李华
网站建设 2026/6/6 14:58:08

springboot基于JAVA框架的学生寝室管理系统

基于SpringBoot的Java学生寝室管理系统介绍 一、系统背景与目标 学生寝室管理是高校后勤管理的重要环节&#xff0c;传统人工管理存在效率低、信息滞后、数据易出错等问题。本系统基于SpringBoot框架与Java语言开发&#xff0c;旨在实现寝室管理的数字化、智能化、规范化&#…

作者头像 李华
网站建设 2026/5/29 23:00:26

HTML 视频(Video)播放

HTML 视频(Video)播放 概述 HTML5 引入的 <video> 元素为网页提供了一种在浏览器中嵌入和播放视频内容的方式。它极大地简化了在网页上嵌入视频的过程,并允许开发者通过多种方式进行控制。 视频元素介绍 在 HTML5 中,<video> 元素用于在网页上嵌入视频。它…

作者头像 李华
网站建设 2026/6/6 11:41:37

通信系统仿真:通信系统基础理论_(4).数字通信基础

数字通信基础 1. 数字信号的表示与处理 1.1 数字信号的概念 数字信号是离散时间信号的一种,通常由一系列的二进制位组成。在数字通信系统中,信息首先被转化为数字信号,然后通过信道传输,最终在接收端恢复为原始信息。数字信号具有抗干扰能力强、易于存储和处理等优点,因…

作者头像 李华