「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

本篇将带领你实现一个倒计时和提醒功能的应用,用户可以设置倒计时时间并开始计时。当倒计时结束时,应用会显示提醒。该项目涉及时间控制、状态管理和用户交互,是学习鸿蒙应用开发的绝佳实践项目。

在这里插入图片描述


关键词
  • UI互动应用
  • 倒计时器
  • 状态管理
  • 用户交互

一、功能说明

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


二、所需组件
  • @Entry@Component 装饰器
  • Text 组件用于显示倒计时
  • Button 组件用于用户交互
  • TextInput 组件用于用户输入倒计时初始时间
  • setIntervalclearInterval 方法用于时间控制
项目结构
  • 项目名称CountdownApp
  • 自定义组件名称CountdownPage
  • 代码文件CountdownPage.etsIndex.ets

三、代码实现
// 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) // 设置页面内边距}
}

效果示例:用户输入时间后点击“开始”按钮,倒计时开始;点击“暂停”按钮暂停倒计时;点击“重置”按钮时倒计时恢复到初始设置的时间。
在这里插入图片描述


四、代码解读
  • TextInput()
    用于用户输入倒计时的初始时间。输入值会同时更新 initialTimetimeLeft
  • setInterval()clearInterval()
    setInterval() 用于每秒更新 timeLeft,实现倒计时;clearInterval() 用于暂停或重置倒计时。
  • resetCountdown()
    timeLeft 重置为 initialTime,确保倒计时恢复到用户设置的初始值。

五、相关知识点
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解
  • 「Mac畅玩鸿蒙与硬件13」鸿蒙UI组件篇3 - TextInput 组件获取用户输入

小结

本篇教程通过实现倒计时和提醒功能,展示了如何在鸿蒙中使用状态管理和时间控制来实现动态更新和用户交互。掌握这些技能后,你将能够更灵活地开发时间管理相关的应用。


下一篇预告

在下一篇「UI互动应用篇4 - 猫与灯的互动应用」中,我们将探索一个有趣的项目,展示如何结合状态和动态图片实现更丰富的用户互动体验。


上一篇: 「Mac畅玩鸿蒙与硬件25」UI互动应用篇2 - 计时器应用实现
下一篇:「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/998.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【升华】自然语言处理架构

自然语言处理(Natural Language Processing,NLP)是指让计算机接受用户自然语言形式的输入,并在内部通过人类所定义的算法进行加工、计算等系列操作,以模拟人类对自然语言的理解,并返回用户所期望的结果。自…

Android OpenGL ES详解——模板Stencil

目录 一、概念 1、模板测试 2、模板缓冲 二、模板测试如何使用 1、开启和关闭模板测试 2、开启/禁止模板缓冲区写入 3、模板测试策略函数 4、更新模板缓冲 5、模板测试应用——物体轮廓 三、模板缓冲如何使用 1、创建模板缓冲 2、使用模板缓冲 3、模板缓冲应用——…

RHCE笔记-DNS服务器

一.DNS简介 DNS(域名系统)是一种互联网服务,负责将我们熟悉的域名(比如 www.example.com)转换为计算机能理解的IP地址(比如 192.0.2.1)。这样,当你在浏览器中输入网址时,…

高效自动化测试,引领汽车座舱新纪元——实车篇

引言 作为智能网联汽车的核心组成部分,智能座舱不仅是驾驶者与车辆互动的桥梁,更是个性化、智能化体验的源泉。实车测试作为验证智能座舱功能实现、用户体验、行车安全及法规符合性的关键环节,能够最直接地模拟真实驾驶场景,确保…

数智税务 | 大企业税务管理,即将面临哪些需求变革?

大企业税务管理,即将面临哪些需求变革? 随着“金税四期”的推进和发票电子化的发展,中国税务机关的税收征管模式逐步从传统的“经验管税”、“以票控税”转向“以数治税”的精准监管模式。这一转变既为大企业供应链加速升级带来了便利&#…

数字IC后端实现之Innovus Place跑完density爆涨案例分析

下图所示为咱们社区a7core后端训练营学员的floorplan。 数字IC后端实现 | Innovus各个阶段常用命令汇总 该学员跑placement前density是59.467%,但跑完place后density飙升到87.68%。 仔细查看place过程中的log就可以发现Density一路飙升! 数字IC后端物…

[SAP ABAP] 自定义字段提供F4帮助

在SAP系统中,F4帮助是一个强大的功能,它允许用户在输入字段值时快速搜索和选择数 我们可以通过编写代码来为自定义字段提供F4帮助 程序代码 REPORT z437_test_2024.* 自定义数据类型 TYPES: BEGIN OF ty_mara,matnr TYPE mara-matnr, " 物料编号…

c怎么与python交互

ctypes是Python的一个外部库,可以使用python语言调用已经编译好的C语言函数以及数据类型并进行数据交换等。ctypes的官方文档在https://docs.python.org/3/library/ctypes.html 1、ctypes基本数据类型映射表 2、python调用c语言的函数库 (1&#xff09…

ssm042在线云音乐系统的设计与实现+jsp(论文+源码)_kaic

摘 要 随着移动互联网时代的发展,网络的使用越来越普及,用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行,人们在日常生活中经常会用到的就是在线云音乐系统…

使用TypeORM进行数据库操作

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用TypeORM进行数据库操作 引言 TypeORM 简介 安装 TypeORM 配置 TypeORM 定义实体 连接数据库 运行项目 高级功能 事务管理 关…

【2024】强网杯

web: PyBlockly: ​ 网站是一个通过block的堆积木的形式编程,有两种数据类型以及四种函数,分别是正常运算,print输出,min和max功能,随便写一些代码,发现结果会回显出来。 ​ 再来…

使用 Qt 实现自定义罗盘控件

用 Qt 编写一个简单的罗盘控件,该控件能够动态显示方向。该控件实现了一个带有北(N)和南(S)标记的圆形罗盘面盘,具有可以根据输入角度旋转的指针。 代码功能概述 该项目定义了一个 CompassWidget 类&…

项目模块十四:HttpRequest模块

一、项目设计思路 存储HTTP请求要素,提供简单接口 二、成员变量 全部公有 string _method; // 请求方法 string _path; // 资源路径 string _version; // 协议版本 string _body; // 请求正文 smatch _matches; // 资源路径正则提取 …

NASA:全球无机气溶胶酸度的机载观测和模拟比较

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 Airborne Observations and Modeling Comparison of Global Inorganic Aerosol Acidity 全球无机气溶胶酸度的机载观测和模拟比较 简介 该数据集提供了在2006年至2017年期间收集的十一项空中观测活…

汽车零部件展|2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会邀您共赏汽车行业盛会

汽车是我国国民经济的重要支柱行业,在我国国民经济中起到举足轻重的作用,也是现代高端制造业的代表。改革开放以来,我国汽车产销量保持增长态势,至 2017 年实现汽车销量 2,887.89 万辆。受到国际经济形势、居民需求下滑、国民经济…

JavaEE-多线程初阶(1)

目录 1. 线程的概念 1.1 线程是是什么 1.2 为什么要有线程 1.3 线程和进程的区别 1.4 Java的线程和操作系统线程的关系 2. 第一个多线程程序 2.1 Hello Thread 2.2 使用jconsole观察线程 3. 创建线程 3.1 继承Thread类 3.2 实现Runnable接口 1. 线程的概念 1.1 线程…

[FE] React 初窥门径(四):React 组件的加载过程(render 阶段)

1. 回顾 前几篇文章中,我们采用了 VSCode 插件 CodeTour 来记录代码的执行过程, 并把相关的数据 .tour/ 放到了 github: thzt/react-tour 中。 截止到本文为之,我们总共记录了这些 code-tour, .tour/ ├── 2. 构建过程.tour ├─…

ASP .NET CORE 6 在项目中集成WatchDog开源项目

概念 WatchDog是一个开源的项目,可以实现对.Net 应用程序和API实现实时应用日志和性能监控平台。可以实现实时记录和查看应用程序中的消息、事件、HTTP请求和响应,以及运行时捕获的异常,有效帮助开发人员去排查应用异常,提升开发效…

Chrome浏览器音/视频无法自动播放

背景:由于google的一些制度,我们在写html项目时会发现刷新页面时无法自动播放audio和video,即使你添加了autoplay属性也无济于事, 但是IE和Edge浏览器是可以自动播放的。 解决方案: 本人在网上搜寻了很多方法&#xf…

WPF自定义日历控件Calendar 的方法

推荐下载地址 https://www.haolizi.net/example/view_2107.html <UserControl.Resources><local1:DayConverter x:Key"DayConverter"/><!--导入转换器--><Style x:Key"CalendarStyle1"TargetType"{x:Type Calendar}">&…