当前位置: 首页 > 科技观察

HarmonyOs-ArkUI(JS)自定义组件的计时组件

时间:2023-03-14 17:29:32 科技观察

了解更多开源请访问:51CTO开源基础软件社区https://ost.51cto.com前言我一直在学习了一段时间HarmonyOSArkUI(JS)。为了检验自己的成绩,根据自己现在掌握的FA相关知识,写了一个简单的定时器组件,日常开发中可能会遇到。该组件基于JS扩展类Web开发范式开发。可以通过传入时间参数实现简单的定时功能,也可以传入其他参数显示手动控制定时和手动选择时间功能。效果展示道具**注:**当只需要计时时,可以直接传入时间(mSec、sec、minute、hour、targetTime、fromTime),然后传入属性autoStart='true'进行自动计时,其中fromTime,targetTime不能与前面四个unit属性共享。参数说明类型默认值mSec倒计时毫秒数,如3000毫秒Number0sec倒计时秒数,如100秒Number0minute倒计时分钟数,如80分钟Number0hour倒计时小时数,如25小时Number0targetTime目标时间,如"2022-6-2110:00:00"String''fromTime开始时间,如"2022-6-2110:00:00"String''autoStart自动计时Booleanfalsecontrol显示手动控制图标BooleanfalseshowAll显示时间选择区,点击数字打开Booleanfalse毫秒打开毫秒级计时Booleanfalse实现代码1.首先将传入或设置的时间转换为毫秒,格式化字符串显示timeToString(value){//毫秒时间转换letsecondTime=parseInt(value/1000),//秒分钟时间=0,//minutehourTime=0,//hourmillisecond=Math.floor((value%1000)/10)if(secondTime>60){//如果秒大于60,将秒转为整数分钟时间=parseInt(secondTime/60);//得到分钟,除以60得到整数,得到整数分secondTime=parseInt(secondTime%60);//得到秒,得到秒,得到秒integersecondif(minuteTime>60){//如果分钟大于60,将分钟转换成小时hourTime=parseInt(minuteTime/60);//得到小时,分钟除以60,得到一个整数hourminuteTime=parseInt(minuteTime%60);//获取小时后的分钟数,将分钟数除以60得到分钟数}}letresult="";如果(这。毫秒){//毫秒计时this.delay=30;结果=“:”+this.sizeFormat(毫秒)+“”+结果;}结果=""+this.sizeFormat(secondTime)+""+结果;if(minuteTime>=0){result=""+this.sizeFormat(minuteTime)+":"+result;}if(hourTime>=0){result=""+this.sizeFormat(hourTime)+":"+result;}//保存时间数据this.countDownTimeText=result;this.hourTime=hourTime;this.minuteTime=分钟时间;this.secondTime=secondTime;returnresult;},//格式化,在sizeFormat(value)前加0{letval=parseInt(value)returnval>=10?''+val:'0'+val},2.启动定时器startTiming(){if(this.countDownTime&&this.order==false){//倒计时this.timer=setInterval(()=>{this.timeToString(this.countDownTime);this.countDownTime=this.countDownTime-this.delay;if(this.countDownTime<=0){this.countDownTimeText='00:00:00';clearTimeout(this.timer);}},this.delay)}else{//顺序计算时this.order=true;this.timer=setInterval(()=>{this.timeToString(this.countDownTime);this.countDownTime=this.countDownTime+this.delay;},this.delay)}}3、hml绑定数据开始时间

结束时间
{{countDownTimeText?countDownTimeText:'00:00:00'}}Timer4.其他代码(1)手动控制jsstart(){clearInterval(this.timer)this.startTiming()//启动定时器},pause(){clearInterval(this.timer)},reset(){this.countDownTime=this.initTime//返回初始时间this.order=false//倒计时模式this.timeToString(this.countDownTime)//格式化时间字符串clearInterval(this.timer)},(2)css.countDown{flex-direction:column;背景色:白色;宽度:100%;字体大小:24px;边界半径:16px;边距:16px;盒子阴影:5px5px8px0px#888888}。背景颜色:黑色;}.content{flex-direction:column;}.select{justify-content:空间周围;对齐项目:居中;height:70px;}.start,.stop{margin-top:18%;flex-direction:column;}.img{height:70px;对齐项目:居中;证明-content:space-around;margin-bottom:20px;}.img_item{宽度:64px;height:64px;}.pickertime{font-size:18px;}.tips{text-align:center;字体大小:14px;颜色:灰色;height:20px;}.count{margin-top:10px;宽度:100%;文本对齐:居中;弹性方向:列;height:60px;}.time{text-align:center;}综上所述,该组件基本完成。容易出错的地方主要是定时器是否需要清零。相当于学习了鸿蒙的开发,自己尝试封装一下,让自己更加了解鸿蒙的开发。欢迎各位开发者一起讨论研究。本次分享希望对大家有所帮助。了解更多开源信息,请访问:51CTO开源基础软件社区https://ost.51cto.com。