news 2026/10/14 13:07:53

案例3.5-计时器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
案例3.5-计时器

【微信小程序】案例3.5 计时器(附功能扩展)

一、案例效果

小程序运行后,首页先显示空白界面,2 秒以后显示计时界面。计时界面包含一个计时数字(初始值为 60)和三个计时按钮:开始计时、停止计时、重新计时。

  • 点击「开始计时」按钮后开始倒计时,数字每秒减 1;
  • 点击「停止计时」按钮后停止计时;
  • 如果当前倒计时的时间还没有到 0,再点击「开始计时」,接着倒计时;
  • 如果已经倒计时到 0,点击「开始计时」或「停止计时」,数字仍然是 0;
  • 点击「重新计时」按钮后从 60 开始重新倒计时。

在基本功能的基础上做了扩展:在时间显示界面上增加了形容时间如流水的背景文字「时光如流水」,用 CSS 伪元素实现。

⚪ 圆形计时显示 时光如流水 ← 背景文字(功能扩展) 60 ← 计时数字 [开始计时] [停止计时] [重新计时]

二、实现步骤

1. 新建项目

打开微信开发者工具,新建一个小程序项目:不使用云服务、不使用模板,直接创建空白项目。

2. 修改 app.json

配置页面路径和窗口样式,并指定使用 webview 渲染引擎:

{"pages":["pages/index/index"],"window":{"navigationBarBackgroundColor":"#ffffff","navigationBarTitleText":"计时器","navigationBarTextStyle":"black"},"renderer":"webview","style":"v2","sitemapLocation":"sitemap.json"}

3. 编写 index.wxml

页面主要由计时显示界面和三个按钮组成。计时显示用wx:if="{{show}}"控制:页面加载时show为false,界面空白;2 秒后show变为true,显示计时界面。三个按钮分别绑定了点击响应函数start、stop、reset。

<viewclass="scrollarea"><viewclass="time"wx:if="{{show}}">{{count}}</view><viewclass="btns"wx:if="{{show}}"><buttonclass="btn start"bindtap="start">开始计时</button><buttonclass="btn stop"bindtap="stop">停止计时</button><buttonclass="btn reset"bindtap="reset">重新计时</button></view></view>

4. 编写 index.wxss

page和.scrollarea的样式是创建项目时自动生成的,其它都是新增的样式。计时数字放在一个圆形白底容器中居中显示,三个按钮用不同颜色区分。

5. 编写 index.js

代码中主要用到了小程序框架的定时器接口:

  • setTimeout:设定一个定时器,在定时到期以后执行注册的回调函数,只执行一次;
  • setInterval:设定一个定时器,按照指定的周期(毫秒)执行回调函数;
  • clearInterval:取消由 setInterval 设置的定时器。
Page({data:{count:60,// 计时数字,初始值为 60show:false// 是否显示计时界面,默认为空白界面},timer:null,// setInterval 定时器编号onLoad:function(){// 首页先显示空白界面,2 秒以后显示计时界面setTimeout(()=>{this.setData({show:true})},2000)},// 开始计时:点击后开始倒计时start:function(){// 已经倒计时到 0,点击“开始计时”,数字仍然为 0if(this.data.count<=0){return}// 已经在计时中,避免重复开启定时器if(this.timer){return}// setInterval:每隔 1 秒执行一次回调this.timer=setInterval(()=>{if(this.data.count>0){this.setData({count:this.data.count-1})}// 倒计时到 0 后停止if(this.data.count===0){clearInterval(this.timer)this.timer=null}},1000)},// 停止计时stop:function(){clearInterval(this.timer)this.timer=null},// 重新计时:从 60 开始重新倒计时reset:function(){clearInterval(this.timer)this.timer=nullthis.setData({count:60})this.start()}})

三、功能扩展:增加形容时间如流水的背景文字

在时间显示界面上增加了背景文字「时光如流水」。实现方法使用了CSS 伪元素:

  1. 给宿主元素.time加上相对定位(position: relative;);
  2. 用伪元素.time::before,通过content: "时光如流水"生成文字,并用绝对定位(position: absolute;)把文字放在计时圆形的上方,作为背景装饰。
.time{position:relative;/* 宿主元素相对定位 *//* ……其它样式…… */}.time::before{content:"时光如流水";position:absolute;/* 绝对定位 */top:100rpx;left:0;right:0;text-align:center;font-size:34rpx;color:rgba(150,150,150,0.6);letter-spacing:8rpx;}

伪元素不会出现在 WXML 中,也不会影响页面结构,非常适合做这类装饰性文字。

四、运行与验证

  1. 点击「编译」,页面先显示空白界面;
  2. 等待 2 秒,显示计时界面(圆形数字 60 + 「时光如流水」背景文字 + 三个按钮);
  3. 点击「开始计时」,数字每秒减 1;
  4. 点击「停止计时」,数字停止变化;
  5. 再点击「开始计时」,数字继续减 1;
  6. 数字减到 0 后停止,此时再点「开始计时」或「停止计时」,数字仍为 0;
  7. 点击「重新计时」,数字回到 60 并重新开始倒计时。

五、总结

这个案例主要用到了以下知识点:

  • setTimeout:延迟指定时间后执行一次回调,用于 2 秒后显示计时界面;
  • setInterval:按指定周期循环执行回调,用于每秒倒计时;
  • clearInterval:取消定时器,用于停止计时和重新计时;
  • 数据绑定{{ }}与this.setData({})驱动页面更新;
  • wx:if条件渲染控制界面的显示与隐藏;
  • CSS 伪元素.time::before+ 绝对定位实现装饰性背景文字。

核心思路是:把倒计时数字存在data中,用setInterval每秒减 1 并通过setData更新页面,用clearInterval控制停止。掌握定时器的用法后,秒表、番茄钟、倒计时提醒等功能都可以在此基础上实现。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 13:07:42

从极简代号到完整项目:实时数据聚合工具rea的设计与实现

1. 从“rea”这个标题说起&#xff1a;一个极简缩写背后的完整项目拆解“rea”这三个字母&#xff0c;第一次看到的时候&#xff0c;我脑子里蹦出来好几个方向。做前端的人可能第一反应是 React 的某种缩写&#xff0c;做音视频的人会想到 RealAudio&#xff0c;做电商的人会想…

作者头像 李华
网站建设 2026/10/14 13:07:41

Oracle 11g Windows安装报错INS-30131:原因分析与修复方案

简介&#xff1a;针对Oracle 11g安装过程中常见的INS-30131“执行安装程序验证所需的初始设置失败”错误&#xff0c;提供一套经过验证的排错思路。该错误多由Windows系统服务未启动或注册表共享参数配置不当引起&#xff0c;尤其在Windows Server环境下容易触发&#xff0c;资…

作者头像 李华
网站建设 2026/10/14 13:07:32

Chart.js雷达图实战指南:从核心配置到多维对比可视化

雷达图&#xff08;Radar Chart&#xff09;在数据可视化里一直是那种“第一眼惊艳、第二眼纠结”的存在。我用 Chart.js 做过不少雷达图实战项目——从开发者多维能力评估、产品功能对比&#xff0c;到运营活动的多指标月度复盘&#xff0c;雷达图在“同一张图里对比多个维度下…

作者头像 李华
网站建设 2026/10/14 13:07:29

Matlab微电网碳交易优化模型设计与实践

1. 项目背景与核心价值碳交易机制作为应对气候变化的市场化手段&#xff0c;正在重塑全球能源格局。微电网作为分布式能源的重要载体&#xff0c;其运行优化直接关系到碳排放量和经济性。这个项目通过Matlab搭建的仿真模型&#xff0c;实现了碳交易机制与微电网运行的深度耦合&…

作者头像 李华
网站建设 2026/10/14 13:05:58

Spring AI Alibaba实战:Java构建AI Agent的ReAct与图编排

如果你是一个 Java 后端开发者&#xff0c;最近一定会有一种被大模型浪潮甩开的感觉。AI Agent 的教程铺天盖地&#xff0c;但十篇里有八篇是 Python&#xff0c;剩下两篇是 Node.js。Java 团队想跟进&#xff0c;最常见的结局是两选一&#xff1a;要么用 HttpClient 封装一次模…

作者头像 李华
网站建设 2026/10/14 13:05:55

SpringBoot集成Dubbo实战:服务拆分与RPC调用避坑指南

1. 从一个真实的服务拆分场景说起去年下半年&#xff0c;我接手了一个挺典型的改造项目。原本是一个单体架构的电商后台&#xff0c;订单、库存、用户、营销几个模块全塞在一个工程里&#xff0c;代码量到了后期&#xff0c;改一个订单状态流转的逻辑&#xff0c;得把整个项目重…

作者头像 李华