当前位置: 首页 > news >正文

HarmonyOS开发-自定义倒计时功能

1. HarmonyOS开发-自定义倒计时功能

1.1. 自定义倒计时控件CountdownView

在这里插入图片描述

1.1.1. 功能说明:

  在这个倒计时应用中,用户可以设置倒计时的初始时间,点击按钮启动倒计时,并在倒计时结束时收到提醒。用户还可以暂停和重置倒计时,并恢复到初始设置的时间。

1.1.2. 所需组件

  (1)@Entry 和 @Component 装饰器
  (2)Text 组件用于显示倒计时
  (3)Button 组件用于用户交互
  (4)TextInput 组件用于用户输入倒计时初始时间
  (5)setInterval 和 clearInterval 方法用于时间控制

1.1.3. 代码实现

  (1)TextInput():用于用户输入倒计时的初始时间。输入值会同时更新 initialTime 和 timeLeft。
  (2)setInterval() 和 clearInterval():setInterval() 用于每秒更新 timeLeft,实现倒计时;clearInterval() 用于暂停或重置倒计时。
  (3)resetCountdown():将 timeLeft 重置为 initialTime,确保倒计时恢复到用户设置的初始值。

// CountdownPage.ets
@Component
export struct CountdownPage {@State timeLeft: number = 0; // 剩余时间@State initialTime: number = 0; // 初始时间@State isRunning: boolean = false; // 倒计时状态private intervalId: number | null = null; // 定时器 IDbuild() {Column({ space: 20 }) {Row() {Text("倒计时:").fontSize(25).fontWeight(FontWeight.Bold);Text(this.formatTime(this.timeLeft)).fontSize(25).fontColor(Color.Red);}// 输入初始时间TextInput({ placeholder: "设置倒计时时间(秒)" }).type(InputType.Number).onChange((value: string) => {if (!this.isRunning) {this.initialTime = parseInt(value) || 0;this.timeLeft = this.initialTime; // 更新剩余时间}});// 按钮交互行Row({ space: 20 }) {Button(this.isRunning ? '暂停' : '开始').onClick(() => {if (this.isRunning) {this.stopCountdown();} else {this.startCountdown();}});Button('重置').onClick(() => {this.resetCountdown();});}.justifyContent(FlexAlign.Center);// 提示倒计时结束if (this.timeLeft === 0 && this.isRunning) {Text("时间到!").fontSize(30).fontColor(Color.Green).fontWeight(FontWeight.Bold);}}.padding(20).height('100%').width('100%').alignItems(HorizontalAlign.Center);}private startCountdown() {if (this.timeLeft > 0) {this.isRunning = true;this.intervalId = setInterval(() => {if (this.timeLeft > 1) {this.timeLeft -= 1;} else {this.stopCountdown();}}, 1000);}}private stopCountdown() {this.isRunning = false;if (this.intervalId !== null) {clearInterval(this.intervalId);this.intervalId = null;}}private resetCountdown() {this.stopCountdown();this.timeLeft = this.initialTime; // 将倒计时重置为初始时间}private formatTime(time: number): string {return `${Math.floor(time / 60).toString().padStart(2, '0')}:${(time % 60).toString().padStart(2, '0')}`;}
}
// Index.ets
import { CountdownPage } from './CountdownPage'@Entry
@Component
struct Index {build() {Column() {CountdownPage() // 调用自定义组件}.padding(20) // 设置页面内边距}
}

1.2. 验证码倒计时功能

1.2.1. 效果

在这里插入图片描述
在这里插入图片描述

1.2.2. 代码

class TimerBean {timerId: number | nullisRunning: booleantimeStr: stringtimeLeft: numberconstructor(timerId: number | null, isRunning: boolean,timeStr: string, timeLeft: number) {this.timerId = timerIdthis.isRunning = isRunningthis.timeStr = timeStrthis.timeLeft = timeLeft}
}@Entry
@Component
struct TimerPage {@State timerId: number | null = null; // 定时器 ID@State isRunning: boolean = false; // 倒计时状态@State timeStr: string = "获取验证码"; // 剩余时间字符串@State timeLeft: number = 10; // 剩余时间@State plvBean: TimerBean = new TimerBean(null, // 定时器 IDfalse, //倒计时状态"获取验证码", //剩余时间字符串20,//加剩余时间)build() {Column({ space: 20 }) {Row() {Text("倒计时:").fontSize(25)

相关文章:

  • 快速创建 Vue 3 项目
  • 深入解析Java泛型:从定义到实战应用
  • RTC技术
  • NBA足球赛事直播源码体育直播M35模板赛事源码
  • SQL概述和定义
  • 50、js 中var { ipcRenderer } = require(‘electron‘);是什么意思?
  • 在Linux debian12系统上使用go语言以及excelize库处理excel数据
  • 记录:express router,可以让node.js后端文件里的路由分布的更清晰
  • 【Node.js】工具链与工程化
  • VR 航天科普,沉浸式体验宇宙奥秘​
  • iOS工厂模式
  • 基于 ZigBee 的 LED 路灯智能控制器的设计
  • 杨校老师竞赛课之青科赛GOC5-6年级组模拟题
  • ESP32-S3 使用SPI-TFT_eSPI与ST7789驱动通信
  • HTTP Digest 认证:原理剖析与服务端实现详解
  • Ubuntu下误删除分区的补救
  • 排序和排列——蓝桥杯备考
  • 供应链管理:联合国/我国 41个产业/工业大类包括什么/代表公司
  • 【C++】控制台小游戏
  • HarmonyOS NEXT~鸿蒙系统下的Cordova框架应用开发指南
  • 红色ppt模板免费下载网站/关键词竞价排名
  • 企业简介的网站怎么做/广告软文小故事800字
  • 马鞍山做网站公司/最好的搜索引擎
  • 做纸贸易的好网站/百度网游排行榜
  • 一级域名做网站/seo英文全称
  • 外贸做那种网站/广东网站seo营销