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

手机号登录页:TextInput 类型 PhoneNumber + 验证码倒计时

前言

"海风日记"的登录功能支持手机号验证码登录,使用TextInputInputType.PhoneNumber类型限制输入格式,并通过setInterval实现 60 秒验证码倒计时。

本文将从LoginPhonePage.ets源码出发,深入讲解手机号登录的实现。


一、手机号输入

@Statephone:string=''@Statecode:string=''TextInput({placeholder:'请输入手机号',text:this.phone}).width('100%').height(52).fontSize(16).type(InputType.PhoneNumber)// 手机号键盘.placeholderColor(COLOR_TEXT_HINT).backgroundColor('#FFFFFF').borderRadius(INPUT_RADIUS).border({width:1,color:'rgba(200,180,140,0.25)'}).padding({left:16,right:16}).onChange((v)=>{this.phone=v})

二、验证码输入与倒计时

@StatecodeSent:boolean=false@Statecountdown:number=0privatetimer:number=-1startCountdown(){this.codeSent=truethis.countdown=60this.timer=setInterval(()=>{this.countdown-=1if(this.countdown<=0){clearInterval(this.timer)this.codeSent=false}},1000)}aboutToDisappear(){if(this.timer!==-1){clearInterval(this.timer)}}

三、验证码按钮

Button(this.codeSent?`${this.countdown}s`:'获取验证码').height(52).fontSize(14).fontColor(this.codeSent?COLOR_TEXT_SECONDARY:COLOR_PRIMARY).backgroundColor(this.codeSent?'rgba(200,180,140,0.10)':'rgba(245,166,35,0.10)').borderRadius(INPUT_RADIUS).border({width:1,color:this.codeSent?'rgba(200,180,140,0.20)':'rgba(245,166,35,0.30)'}).padding({left:14,right:14}).enabled(!this.codeSent&&this.phone.length===11).onClick(()=>{this.startCountdown()})

四、登录按钮

Button('立即登录').width('100%').height(52).fontSize(17).fontColor('#FFFFFF').fontWeight(FontWeight.Bold).backgroundColor(COLOR_PRIMARY).borderRadius(BTN_RADIUS_FULL).shadow({radius:16,color:'rgba(245,166,35,0.35)',offsetY:4}).margin({top:28,left:PAGE_PADDING,right:PAGE_PADDING}).onClick(()=>{router.replaceUrl({url:'pages/login/LoginNamePage'})})

五、倒计时生命周期管理

aboutToDisappear(){if(this.timer!==-1){clearInterval(this.timer)// 页面销毁时清理定时器}}

六、常见问题

6.1 倒计时不停止

问题:页面关闭后倒计时仍在运行。

原因:未在aboutToDisappear中清理定时器。

解决方案:在aboutToDisappear中调用clearInterval


总结

本文通过"海风日记"的手机号登录页,深入讲解了验证码登录的实现:

  1. InputType.PhoneNumber:手机号键盘
  2. setInterval 倒计时:60 秒验证码
  3. 按钮禁用状态:根据条件控制
  4. 定时器清理:生命周期管理

下一篇文章将深入讲解setInterval 倒计时实现,敬请期待。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • TextInput 组件文档
  • setInterval API 文档
  • 海风日记项目源码
  • [HarmonyOS 开发者官网](https://atomgit.com/openharmony/docs
  • 开源鸿蒙跨平台社区
http://www.jsqmd.com/news/1232940/

相关文章:

  • 为什么你的AI项目总卡在上线前?资深CTO拆解4类典型失败案例,附完整CI/CD流水线配置模板(限前200份)
  • Claude Tag技术解析与开源实现对比
  • 2026年最新教程:建筑像素图怎么做成拼豆 亲测有效方法 - 软件测评小帮手
  • 打卡信奥刷题(3458)用C++实现信奥题 P10488 [BAPC 2006 资格赛] Booksort
  • 宁波经济纠纷:袁勤玮教你3步选对个人律师,经济纠纷/法律顾问/金融纠纷/合同纠纷/公司纠纷,经济纠纷律师找哪个 - 品牌推荐师
  • SpaceMind智能空间:Agent技术进化与场景化应用
  • DeepSeek LeetCode 3630. 划分数组得到最大异或运算和与运算之和 Java实现
  • YOLO部署中的后处理优化:NMS的GPU加速实现与Python层后处理的性能陷阱
  • Unity跨平台文件对话框实战:从原生API到CompactStandaloneFileBrowser
  • mdapy:高效分子动力学分析工具全解析
  • 使用libtcc实现C语言动态编译与JIT技术
  • 本地服务企业网站的内容工程:Next.js、Prisma、SQLite、Docker与GEO实践
  • C++智能仓储系统性能优化:从内存管理到并发重构的工程实践
  • AI时代如何捍卫创作者表达权?ArtArch的创新实践
  • TI eHRPWM寄存器深度解析:从时基到死区的电机控制实战配置
  • 2026实力之选:物流服务公司——高效运输、智能仓储与优质服务实力之选 - 甄选服务推荐
  • 硬件课程设计优化服务的商业价值与技术实践
  • 单片机芯片烧录全流程解析与实战指南
  • UE5光照与阴影实战指南:从核心原理到性能优化
  • 现代C++智能指针与RAII实战指南:从原理到应用场景
  • 3分钟解锁Wand高级功能:告别付费墙的终极方案
  • 多AI协作开发如何避免“自己写、自己审”:Codex、Claude Code与工程验收闭环
  • ISP色度处理与自动控制:从YUV采样到H3A统计的工程实践
  • JDK 8升级高版本JDK的完整指南与实战经验
  • HarmonyOS开发实战: EmailFeedbackPage 意见反馈 + AboutPage 关于页
  • RTX 5090显卡深度评测:DLSS 4与散热创新解析
  • 2026 年新发布:栾川热门的干法施工隔墙板厂商推荐,揭秘:墙体隔断的未来,干法施工板能帮你省下多少钱? - 行业鉴选官
  • PDF、Word、HTML、Markdown、图片等文档解析工具MinerU和Docling
  • FreeRTOS学习(三)——任务状态和调度器运行过程
  • 深入解析MMC/SD/SDIO控制器:中断、DMA与缓冲区管理协同机制