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

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)
http://www.xdnf.cn/news/8057.html

相关文章:

  • 基于系统整合的WordPress个性化配置方法深度解析:从需求分析到实现过程
  • SQLite 创建表
  • Rust 创建并编译一个可供 C 或其他语言调用的动态链接库
  • LInux—shell编程
  • docker-volume-backup 备份 ragflow volumes
  • Java虚拟机 -方法调用
  • 第三次中医知识问答模型微调
  • 桥接智能制造:PROFINET与Devicenet混合架构赋能汽车擦净机器人升级
  • 人工智能在工业自动化中的应用与未来趋势
  • Leetcode 1522. N 叉树的直径
  • ShenNiusModularity项目源码学习(28:ShenNius.Admin.Mvc项目分析-13)
  • 冒险岛(MapleStory) 083脚本教程
  • Scrapy爬取heima论坛所有页面内容并保存到MySQL数据库中
  • SQL语句面试题
  • Ubuntu 22.04上升级Node.js版本
  • Web安全与漏洞挖掘
  • C++ inline 内联函数
  • 【PhysUnits】7 类型整数基本结构体(basic.rs)
  • 掩膜合并代码
  • 力扣算法---哈希表总结篇
  • 【无标题】Spring AI 1.0 正式发布!核心内容和智能体详解
  • upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
  • C语言判断素数(附带源码和解析)
  • 第十三届蓝桥杯国赛PythonA题解
  • 贪心算法题目合集2
  • 链表day3
  • Linux电源管理——PSCI初始化流程和多核启动流程
  • 对于final、finally和finalize不一样的理解
  • Java基于SSM的数学辅导微信小程序【附源码、文档说明】
  • 招投标项目记录