小网站托管费用,电子商务平台有哪些,文昌市住房和城乡建设局网站,网络怎么设计欢迎大家加入开源鸿蒙跨平台开发者社区#xff0c;一起共建开源鸿蒙跨平台生态。 数据可视化的重要性
目标进度的可视化展示能够让用户更直观地了解自己的运动成果。通过Cordova框架与OpenHarmony的图表库#xff0c;我们可以创建多种形式的进度展示。本文将介绍如何实现这一…欢迎大家加入开源鸿蒙跨平台开发者社区一起共建开源鸿蒙跨平台生态。数据可视化的重要性目标进度的可视化展示能够让用户更直观地了解自己的运动成果。通过Cordova框架与OpenHarmony的图表库我们可以创建多种形式的进度展示。本文将介绍如何实现这一功能。进度条组件classProgressBar{constructor(containerId,options){this.containerdocument.getElementById(containerId);this.options{width:options.width||300,height:options.height||20,color:options.color||#4ECDC4,backgroundColor:options.backgroundColor||#E0E0E0};}render(progress){constpercentageMath.min(progress,100);this.container.innerHTMLdiv classprogress-bar-wrapper stylewidth:${this.options.width}px; height:${this.options.height}px; background-color:${this.options.backgroundColor}; border-radius: 10px; overflow: hidden; div classprogress-bar-fill stylewidth:${percentage}%; height: 100%; background-color:${this.options.color}; transition: width 0.3s ease;/div /div div classprogress-text${percentage.toFixed(1)}%/div;}}ProgressBar类提供了一个可配置的进度条组件。通过options参数用户可以自定义进度条的宽度、高度和颜色。render方法根据进度百分比动态更新进度条的宽度。这种组件化的设计使得代码更加可复用。圆形进度指示器functionrenderCircularProgress(goal){constcanvasdocument.getElementById(circular-progress);constctxcanvas.getContext(2d);constradius50;constcircumference2*Math.PI*radius;constprogress(goal.progress/100)*circumference;// 绘制背景圆ctx.beginPath();ctx.arc(60,60,radius,0,2*Math.PI);ctx.strokeStyle#E0E0E0;ctx.lineWidth8;ctx.stroke();// 绘制进度圆ctx.beginPath();ctx.arc(60,60,radius,-Math.PI/2,-Math.PI/2(progress/circumference)*2*Math.PI);ctx.strokeStyle#4ECDC4;ctx.lineWidth8;ctx.stroke();// 绘制文字ctx.fillStyle#333;ctx.fontbold 24px Arial;ctx.textAligncenter;ctx.textBaselinemiddle;ctx.fillText(${goal.progress.toFixed(0)}%,60,60);}圆形进度指示器提供了一种更加美观的进度展示方式。这个函数使用Canvas绘制一个圆形进度条中心显示百分比。这种设计特别适合在仪表板上展示单个目标的进度。多目标对比图表functionrenderGoalComparison(goals){constchartData{labels:goals.map(gg.name),datasets:[{label:完成进度,data:goals.map(gg.progress),backgroundColor:[#FF6B6B,#4ECDC4,#45B7D1,#FFA07A,#98D8C8],borderColor:#fff,borderWidth:2}]};renderBarChart(goal-comparison,chartData);}多目标对比图表让用户能够一目了然地看到所有目标的进度。这个函数准备了柱状图数据每个目标对应一个柱子。通过不同的颜色区分不同的目标使得图表更加清晰易读。时间线进度展示functionrenderProgressTimeline(goal){consttimelinedocument.getElementById(progress-timeline);constmilestonescalculateMilestones(goal);lettimelineHTMLdiv classtimeline;milestones.forEach((milestone,index){constisCompletedgoal.currentValuemilestone.value;conststatusisCompleted?completed:pending;timelineHTMLdiv classtimeline-item${status} div classtimeline-marker/div div classtimeline-content div classmilestone-label${milestone.label}/div div classmilestone-value${milestone.value}${getUnitForType(goal.type)}/div div classmilestone-date${formatDate(milestone.date)}/div /div /div;});timelineHTML/div;timeline.innerHTMLtimelineHTML;}functioncalculateMilestones(goal){constmilestones[];conststepgoal.targetValue/4;for(leti1;i4;i){milestones.push({value:step*i,label:里程碑${i},date:newDate(goal.createdAt(i*(goal.deadline-goal.createdAt)/4))});}returnmilestones;}时间线进度展示将目标分解为多个里程碑展示用户的进度路径。这个函数计算了四个等间距的里程碑并根据用户的当前进度标记完成状态。这种展示方式能够让用户看到自己的进度轨迹。热力图展示functionrenderActivityHeatmap(workoutData){constheatmapContainerdocument.getElementById(activity-heatmap);constweeks12;constdaysPerWeek7;letheatmapHTMLdiv classheatmap;for(letweek0;weekweeks;week){heatmapHTMLdiv classheatmap-week;for(letday0;daydaysPerWeek;day){constdatenewDate();date.setDate(date.getDate()-(weeks*7-week*7-day));constdateStrdate.toISOString().split(T)[0];constactivityworkoutData[dateStr]||0;constintensitygetIntensityLevel(activity);heatmapHTMLdiv classheatmap-cell intensity-${intensity} title${dateStr}:${activity}次运动/div;}heatmapHTML/div;}heatmapHTML/div;heatmapContainer.innerHTMLheatmapHTML;}functiongetIntensityLevel(activity){if(activity0)returnnone;if(activity1)returnlow;if(activity2)returnmedium;if(activity3)returnhigh;returnvery-high;}热力图展示提供了一个长期的运动活动概览。这个函数创建了一个12周的热力图每个格子代表一天的运动活动。通过不同的颜色强度表示运动频率用户可以直观地看到自己的运动规律。目标达成率统计functioncalculateGoalAchievementRate(allGoals){conststats{totalGoals:allGoals.length,completedGoals:0,inProgressGoals:0,overdueGoals:0,achievementRate:0};allGoals.forEach(goal{if(goal.statuscompleted){stats.completedGoals;}elseif(goal.isOverdue()){stats.overdueGoals;}else{stats.inProgressGoals;}});stats.achievementRate(stats.completedGoals/stats.totalGoals)*100;returnstats;}目标达成率统计提供了用户目标完成情况的概览。这个函数计算了完成、进行中和逾期的目标数量以及总体的达成率。这种统计能够帮助用户了解自己的目标管理效果。总结目标进度可视化通过Cordova与OpenHarmony的结合提供了多种形式的进度展示方式。从进度条到圆形指示器从时间线到热力图这些可视化工具能够帮助用户更直观地了解自己的运动进度。通过这些展示方式用户能够更好地跟踪自己的目标完成情况保持运动的动力。