微信小程序实验:计时器

本案例实现倒计时计时器,页面初始 2 秒空白后展示计时面板,支持开始计时、停止计时、重新计时;倒计时初始值 60,暂停后可继续计时,计数到 0 自动停止。拓展功能使用 CSS 伪元素在计时框增加背景文字。

知识点:setTimeout延时定时器、setInterval周期定时器、clearInterval清除定时器、条件渲染hidden、CSS 伪元素与绝对定位。

开发环境

  • 微信开发者工具
  • 渲染引擎:webview
  • 项目:不使用云服务、不使用模板

一、需求分析

  1. 小程序打开先空白 2 秒,2 秒后渲染计时界面。
  2. 倒计时初始数值为 60。
  3. 点击开始计时,每秒数字减 1;
  4. 点击停止计时暂停倒计时,未到 0 时再次点击开始可继续计时;
  5. 倒计时归 0 后,点击开始 / 停止都不会继续变化;
  6. 点击重新计时,重置为 60 并启动倒计时。
  7. ✨拓展作业:计时框内部增加背景文字 “逝者如斯夫,不舍昼夜”。

二、实现原理

  1. setTimeout延时定时器:只执行一次,实现页面 2 秒后才显示计时面板。
  2. setInterval周期定时器:每隔 1000ms 执行一次,实现数字每秒递减;保存timerId定时器编号。
  3. clearInterval(timerId):传入定时器编号,终止周期计时,实现暂停。
  4. hidden条件渲染:控制整个计时模块显示与隐藏。
  5. CSS 伪元素::before+ 相对 / 绝对定位,叠加背景水印文字,不改动 DOM 结构。
  6. 边界处理:倒计时等于 0 时,清除定时器,禁止继续计时。

三、完整代码实现

1.app.json

{ "pages": [ "pages/index/index" ], "window": { "navigationBarTextStyle": "black", "navigationStyle": "custom" }, "style": "v2", "renderer": "webview", "componentFramework": "glass‑easel", "sitemapLocation": "sitemap.json", "lazyCodeLoading": "requiredComponents" }

2.pages/index/index.wxml

<!--index.wxml--> <navigation-bar title="计时器" back="{{false}}" color="black" background="#FFF"></navigation-bar> <scroll-view class="scrollarea" scroll-y type="list"> <view class="box" hidden="{{hidden}}"> <view class="title">计时器函数的应用</view> <view class="time">{{num}}</view> <view class="btn-layout"> <button type="primary" size="mini" bind:tap="start">开始计时</button> <button type="primary" size="mini" bind:tap="stop">停止计时</button> <button type="primary" size="mini" bind:tap="restart">重新计时</button> </view> </view> </scroll-view>

3.pages/index/index.js

// index.js let num = 60 let isTime = true let timerId Page({ data: { hidden: true, num }, onLoad() { //延时2000ms执行,2秒后显示计时界面 setTimeout(() => { this.show() }, 2000) }, show() { this.setData({ hidden: false }) }, //开始计时 start() { if (isTime) { timerId = setInterval(() => { this.timer() }, 1000) } }, //每秒执行的计时逻辑 timer() { console.log(num); this.setData({ num }) if (num > 0) { num-- } else { //倒计时到0,清除定时器,禁止计时 clearInterval(timerId) isTime = false } }, //停止计时 stop() { clearInterval(timerId) isTime = true }, //重新计时 restart() { clearInterval(timerId) isTime = true num = 60 this.setData({ num }) this.start() } })

4.pages/index/index.wxss(含拓展伪元素)

/**index.wxss**/ page { height: 100vh; display: flex; flex-direction: column; } .scrollarea { flex: 1; overflow-y: hidden; } .time { width: 90%; background-color: blue; color: yellow; font-size: 200rpx; text-align: center; border: 2rpx solid red; border-radius: 60rpx; margin: 30rpx; position: relative; z-index: 1; } /*拓展:CSS伪元素实现背景水印文字*/ .time::before { content: "逝者如斯夫,不舍昼夜"; position: absolute; z-index: 0; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 40rpx; color: #cccccc; } .btn-layout { display: flex; flex-direction: row; }

5.app.wxss

/**app.wxss**/ .box { margin: 20rpx; padding: 20rpx; border: 2rpx solid purple; } .title { font-size: 40rpx; font-weight: bolder; text-align: center; margin-bottom: 30rpx; color: pink; }

四、核心 API 讲解

  1. setTimeout(callback, delay)一次性延时定时器,等待 delay 毫秒执行回调,只执行一次;本案例用于 2 秒延迟展示页面。
  2. setInterval(callback, delay)周期性定时器,每隔 delay 毫秒重复执行回调,返回timerId编号。
  3. clearInterval(timerId)根据定时器编号,关闭周期定时器,停止循环执行,实现暂停计时。
  4. hidden="{{hidden}}"条件渲染属性,true隐藏组件,false显示组件。
  5. CSS ::before 伪元素不需要增加 DOM 标签,直接给元素添加虚拟内容;配合relative+absolute实现文字叠加水印效果。

五、踩坑记录

  1. ❌忘记保存timerId,无法停止定时器,计时无法暂停。 注意:setInterval返回编号,停止时必须传入该编号给clearInterval。
  2. 多次点击开始计时,会开启多个定时器,数字加速递减。 处理:用isTime标记,计时运行时禁止重复开启定时器
  3. 倒计时到 0 没有清除定时器,会出现负数;判断num>0再递减,归 0 调用clearInterval。
  4. 调用restart重新计时,没有先clearInterval,旧定时器还在后台运行,出现计时错乱。
  5. 伪元素不显示:父盒子没有设置position:relative,绝对定位找不到参照。

六、运行效果

  1. 进入小程序,前 2 秒页面空白;2 秒后出现蓝色计时框,初始数字 60。
  2. 点击开始计时,数字每秒减 1,控制台打印数值。
  3. 点击停止计时,数字暂停;再次点击开始,继续往下倒计时。
  4. 数字降到 0,自动停止,再点开始不再变化。
  5. 点击重新计时,数字重置 60,自动开始倒计时;计时框底层显示灰色背景文字 “逝者如斯夫,不舍昼夜”。

七、总结

本案例实现小程序倒计时计时器,setTimeout实现 2 秒延迟显示界面,setInterval与clearInterval控制倒计时启停,完成开始、停止、重新计时业务逻辑;利用 CSS 伪元素实现水印背景文字。掌握延时定时器、周期定时器、定时器销毁、条件渲染,注意管理 timerId 防止多定时器并发问题。

相关新闻

监控Kubernetes集群的GPU资源(一)

监控Kubernetes集群的GPU资源(一)

对于SRE团队来说&#xff0c;实现监控AI、高性能计算平台上大规模GPU资源&#xff0c;至关重要。SRE团队可以通过GPU指标了解工作负载等相关性能&#xff0c;从而优化资源分配&#xff0c;提升资源利用率及异常诊断&#xff0c;以提高数据中心资源的整体效能。除了SRE及基础设施…

2026/10/21 2:24:52 阅读更多 →
算法复杂度分析笔记:主定理详解

算法复杂度分析笔记:主定理详解

文章目录&#x1f4dd; 算法复杂度分析笔记&#xff1a;主定理详解1. 题目回顾2. 核心工具&#xff1a;主定理 (Master Theorem)&#x1f511; 参数含义⚖️ 比较逻辑3. 解题步骤演示第一步&#xff1a;提取参数第二步&#xff1a;计算临界值第三步&#xff1a;比较 f(n)f(n)f(…

2026/10/21 2:23:52 阅读更多 →
考研院校推荐与分数线预测系统:Python+Django毕业设计完整实现

考研院校推荐与分数线预测系统:Python+Django毕业设计完整实现

做毕业设计选题目&#xff0c;最怕的就是“看起来高大上&#xff0c;实际上无从下手”。“考研院校推荐系统 考研分数线预测系统”这个题目&#xff0c;用到的技术正好是 Python Django&#xff0c;既能体现出机器学习、数据分析的能力&#xff0c;又能落地成一个完整的Web应…

2026/10/21 2:23:52 阅读更多 →

最新新闻

无人机航拍小目标检测数据集构建:从场景设计到智慧交通与应急救援落地

无人机航拍小目标检测数据集构建:从场景设计到智慧交通与应急救援落地

我做无人机视觉落地也有几年了&#xff0c;今年被问得最多的问题不是“模型怎么调”&#xff0c;而是“模型怎么到了现场就不灵”。很多朋友拿着公开的航拍检测模型&#xff0c;在桌面演示上mAP能到七八十个点&#xff0c;可一部署到国内的十字路口、老小区、城乡结合部&#x…

2026/10/21 3:07:07 阅读更多 →
Seay源代码审计系统实战:PHP漏洞扫描与规则扩展

Seay源代码审计系统实战:PHP漏洞扫描与规则扩展

简介&#xff1a;Seay源代码审计系统是一款基于C#开发的PHP代码安全审计工具&#xff0c;主要运行于Windows平台&#xff0c;面向网络安全初学者、CTF/AWD参赛选手及渗透测试人员&#xff0c;用于快速定位PHP项目中的安全隐患。它能够识别SQL注入、代码执行、命令执行、文件包含…

2026/10/21 3:07:07 阅读更多 →
Seay源代码审计系统实战:PHP静态代码审计与AWD快速排查指南

Seay源代码审计系统实战:PHP静态代码审计与AWD快速排查指南

简介&#xff1a;Seay源代码审计系统是一款基于C#开发的PHP代码安全审计工具&#xff0c;主要运行于Windows平台&#xff0c;面向网络安全初学者、CTF/AWD参赛选手及渗透测试人员&#xff0c;用于快速定位PHP项目中的安全隐患。它可检测SQL注入、代码执行、命令执行、文件包含、…

2026/10/21 3:07:07 阅读更多 →
程序员 AI 出图避坑:椒图 AI 与 Nano Banana Pro 实战指南

程序员 AI 出图避坑:椒图 AI 与 Nano Banana Pro 实战指南

如果你也是那种被拉去“顺带做个图”就浑身难受的程序员&#xff0c;这篇文章应该能帮你省下不少救心丸。我自己的本职是写后端&#xff0c;大部分时间对着终端和接口文档&#xff0c;但只要涉及方案评审、产品汇报、开源项目宣传&#xff0c;就逃不开一个尴尬任务&#xff1a;…

2026/10/21 3:07:07 阅读更多 →
从能生成到有质感:Seedance 2.0镜头语言全解析

从能生成到有质感:Seedance 2.0镜头语言全解析

先说一个我自己的真实感受&#xff1a;第一次用 Seedance 2.0 生成视频时&#xff0c;我很兴奋&#xff0c;因为画面真的“能动了”。但等我把五六段素材拼到一起&#xff0c;越看越不对劲——画面在动&#xff0c;情绪却没动&#xff1b;每个镜头单拎出来都不差&#xff0c;连…

2026/10/21 3:07:07 阅读更多 →
RAG效果差?问题多半出在知识库管理:清洗、分块与治理实战

RAG效果差?问题多半出在知识库管理:清洗、分块与治理实战

先说明一点&#xff1a;这个标题我深有同感。做了大半年RAG相关的东西&#xff0c;见过不少团队把精力全压在召回链路调参上&#xff0c;结果效果上不去&#xff0c;最后排查一圈&#xff0c;问题全出在知识库本身——脏数据、错分块、无版本、无评测&#xff0c;源头一乱&…

2026/10/21 3:06:07 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →