news 2026/2/8 14:20:58

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/2/8 10:05:28

四时四名,一山万象:朝鲜金刚山的锦绣风姿

金刚山属太白山脉核心段&#xff0c;横跨金刚郡、通川郡等多地及韩国麟蹄郡&#xff0c;总面积达530平方公里。这座秀丽名山东西绵延40公里&#xff0c;南北纵贯60公里&#xff0c;海拔千米以上山峰逾60座&#xff0c;主峰毗卢峰以1638米的海拔雄踞群峰之上。山名源自佛教“金刚…

作者头像 李华
网站建设 2026/2/8 13:42:51

基于Spring Boot的果蔬销售系统

基于Spring Boot的果蔬销售系统&#xff08;含推荐算法&#xff09;介绍 基于Spring Boot的果蔬销售系统是一款结合智能推荐算法的电商平台&#xff0c;旨在优化果蔬销售流程&#xff0c;提升用户体验和销售效率。系统通过整合现代Web开发技术和个性化推荐算法&#xff0c;解决…

作者头像 李华
网站建设 2026/2/8 1:24:17

Scala Collection(集合)

Scala Collection(集合) Scala 作为一种多范式编程语言,在集合处理方面提供了丰富的工具和方法。Scala 的集合操作是语言的核心特性之一,使得处理数据集变得更加高效和直观。本文将深入探讨 Scala 集合的概念、类型以及常用操作。 引言 在 Scala 中,“集合”指的是一组…

作者头像 李华
网站建设 2026/2/5 17:36:44

介观交通流仿真软件:DynusT_(11).交通事件管理

交通事件管理 在交通流仿真中&#xff0c;交通事件管理是一个重要的模块&#xff0c;用于模拟和管理各种交通事件&#xff0c;如交通事故、交通管制、道路施工等。这些事件可以显著影响交通流的特性和仿真结果。本节将详细介绍如何在仿真软件中实现交通事件管理&#xff0c;包…

作者头像 李华
网站建设 2026/2/9 2:28:50

django基于Python天气分析系统

Django基于Python的天气分析系统是一个集成了数据采集、处理、分析和可视化功能的综合性系统。以下是对该系统的详细介绍&#xff1a; 一、系统架构与技术栈 1.后端框架&#xff1a;Django作为后端框架&#xff0c;负责处理业务逻辑&#xff0c;如数据的接收、存储和初步处理&a…

作者头像 李华
网站建设 2026/2/7 14:44:25

python基于大数据的分析长沙旅游景点推荐系统

Python基于大数据的分析长沙旅游景点推荐系统是一种高效、个性化的旅游辅助工具。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 长沙作为湖南省的省会城市&#xff0c;拥有丰富的旅游资源&#xff0c;包括自然风光、历史文化、美食等。然而&#xff0c;随着旅游业…

作者头像 李华