news 2026/4/18 3:35:04

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/4/16 20:18:20

TypeScript Map 对象

TypeScript Map 对象 引言 在TypeScript中,Map 对象是一种非常强大的数据结构,它能够存储键值对,并且提供了许多便捷的方法来操作这些键值对。本文将详细介绍TypeScript中的Map对象,包括其基本用法、特点、常用方法以及与数组的比较。 基本用法 创建Map对象 在TypeScr…

作者头像 李华
网站建设 2026/4/13 15:12:53

C++ 中 unordered_map 的 at() 和 []

在 C 中&#xff0c;unordered_map 的 at() 和 [] 都可以访问元素&#xff0c;但它们在行为上有重要区别&#xff1a; [] 运算符 unordered_map<string, int> m {{"apple", 1}}; m["apple"] 2; // 修改已存在的元素 m["banana"] …

作者头像 李华
网站建设 2026/4/15 16:58:47

Python 爬虫实战:解析 JSON 数据接口的爬虫开发

前言 在网络数据采集领域&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为轻量级的数据交换格式&#xff0c;被绝大多数 Web 应用的接口所采用。相较于传统的 HTML 页面解析&#xff0c;JSON 接口爬取具有数据结构清晰、解析效率高、数据提取成本低等…

作者头像 李华
网站建设 2026/4/18 3:33:42

避开 35 岁职场危机:网络安全为何能成为越沉淀越吃香的赛道?

前几天我表弟小王来找我喝茶&#xff0c;聊着聊着突然问我&#xff1a;“老曹&#xff0c;你说我要不要转行做网络安全啊&#xff1f; 听说这行业挺赚钱的。 “我一听就笑了&#xff0c;这不正好最近我刚研究过这个行业吗&#xff1f; 我跟他说&#xff0c;别看现在各行各业…

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

Cesium中实现燕尾箭头、双向箭头等绘制

概要 Cesium中已经自带了多种形状的绘制&#xff0c;但是对于一些特殊的形状&#xff0c;需要我们自行定义。形状都是由点、线、面组成,对于复杂的图形其实可以拆解成多个简易形状组合而成。比如箭头可以看出是三角形和长方形的组合&#xff0c;但是这样做的话绘制的代码可能也…

作者头像 李华
网站建设 2026/4/17 20:31:29

22、Linux 系统进程管理与文本文件编辑全解析

Linux 系统进程管理与文本文件编辑全解析 1. 识别运行进程 在 Linux 系统中,了解系统的负载平均情况能反映出系统中进程对 CPU 时间的需求。例如,在一个四核 CPU 的系统上,负载平均为 4.0 意味着进程对 CPU 时间的需求恰好等于计算机所能提供的 CPU 时间。 w 命令可以告…

作者头像 李华