微信小程序案例 2.10:自动随机变化的颜色 —— 用 setData + 定时器实现逐行诗句变色
微信小程序案例 2.10自动随机变化的颜色 —— 用 setData 定时器实现逐行诗句变色一、前言这是《微信小程序开发》课程里的一个经典小案例页面上显示一段文字每隔一段时间文字颜色自动随机变化同时提供一个按钮可以手动触发变色。我在完成基础功能后做了两点扩展一是把演示文本换成了一首完整的古诗《春晓》加上诗名和作者二是让每一行诗句拥有独立的随机颜色而作者姓名始终保持黑色不变。这个过程中踩了几个坑也顺带把 setData、setInterval 和样式绑定的关系彻底搞清楚了。二、需求分析基础要求页面标题为“自动随机变化的颜色”每隔 2 秒文字颜色自动变为随机色点击按钮可手动改变颜色标题颜色与正文颜色同步变化。自我扩展正文改为《春晓》全诗包含诗名与作者诗名与第一句诗句颜色同步第二句独立变色作者“【唐】孟浩然”永远为黑色不参与变色字体放大、整体居中具备诗词展示的视觉效果。三、实现思路核心思路其实只有一句话颜色由 data 中的数据决定样式通过 style“color: {{变量}}” 绑定到视图上JS 里只需修改数据界面就会自动更新。具体拆成三步WXML不写死颜色而是给每个需要变色的元素绑定一个不同的变量titleColor、line1、line2作者那行干脆不绑天然就是 WXSS 里定义的黑色WXSS只管排版居中、字号、行高不管颜色颜色和排版彻底分离JS写一个生成 #RRGGBB 随机色的工具函数在 changeColor 里给每个变量分别赋值onLoad 里用 setInterval 每 2 秒调用一次onUnload 里清除定时器。四、代码实现4.1 页面结构 index.wxmlxml编辑自动随机变化的颜色 春晓!-- 作者永远黑色不参与变色 -- view classpoem-author【唐】孟浩然/view !-- 每句诗各自独立颜色 -- view classpoem-content view stylecolor: {{line1}}春眠不觉晓处处闻啼鸟。/view view stylecolor: {{line2}}夜来风雨声花落知多少。/view /view改变颜色这里的关键点是想让哪几个元素同色就给它们绑定同一个变量。诗名和第一句都绑了 line1所以它们永远一致作者没有内联 style因此不受 JS 控制。4.2 页面样式 index.wxsscss编辑/* 页面整体布局 */.container {display: flex;flex-direction: column;align-items: center;justify-content: center;min-height: 100vh;background-color: #f8f9fa;padding: 40rpx;}/* 顶部标题 */.title {font-size: 52rpx;font-weight: bold;margin-bottom: 80rpx;text-align: center;}/* 古诗整体容器 */.poem-wrapper {display: flex;flex-direction: column;align-items: center;width: 100%;margin-bottom: 100rpx;}/* 诗名 */.poem-title {font-size: 64rpx;font-weight: bold;margin-bottom: 30rpx;text-align: center;}/* 作者/.poem-author {font-size: 42rpx;margin-bottom: 50rpx;text-align: center;color: #000000; /强制黑色永不变化 */}/* 正文诗句 */.poem-content {font-size: 50rpx;line-height: 2.4;text-align: center;width: 100%;}/* 按钮 */.btn {width: 70%;font-size: 36rpx;}4.3 页面逻辑 index.jsjavascript编辑Page({data: {titleColor: ‘#000000’,line1: ‘#000000’,line2: ‘#000000’},// 页面加载时启动定时器onLoad() {this.changeColor(); // 先变一次避免首屏全是黑色this.timer setInterval(() {this.changeColor();}, 2000); // 2000 毫秒 2 秒},// 按钮点击触发changeColor() {this.setData({titleColor: this.getRandomColor(), // 标题独立变色line1: this.getRandomColor(), // 诗名 第一句同步变色line2: this.getRandomColor() // 第二句独立变色});},// 生成形如 #A3F01C 的随机颜色getRandomColor() {const letters ‘0123456789ABCDEF’;let color ‘#’;for (let i 0; i 6; i) {color letters[Math.floor(Math.random() * 16)];}return color;},// 页面卸载时清除定时器防止内存泄漏onUnload() {clearInterval(this.timer);}});五、运行效果此处插入两张截图① 初始状态② 点击按钮或等待 2 秒后的变色状态从效果可以看出标题自成一个颜色诗名与第一句完全一致第二句又是另一个颜色而作者始终为黑色符合预期。六、踩坑记录坑一CSS 全部挤成一行导致编译报错。第一次改样式时我是直接在原文件上追加结果所有规则粘在一起、注释也混进了选择器里模拟器直接白屏。教训修改样式文件前先全选清空再整段粘贴保证每条规则独立成行。坑二改了 WXML 却没改 JS 的变量名。WXML 里写了 {{line1}}但 data 里还留着旧的 textColor控制台报 undefined颜色不生效。教训新增绑定变量后必须回到 JS 的 data 和 setData 里补上对应字段三者要一一对应。坑三忘记清定时器。一开始没写 onUnload反复编译预览后控制台出现一堆定时器叠加的警告。小程序页面销毁后定时器不会自动停止必须手动 clearInterval。坑四首屏全是黑色。只在 setInterval 里调用变色函数会导致页面刚打开的前 2 秒仍是初始黑色。解决办法是在 onLoad 里先主动执行一次 this.changeColor()。七、知识点总结表格知识点 本案例中的体现数据绑定 style“color: {{titleColor}}” 实现动态样式setData 唯一能驱动视图更新的方式直接改 this.data 无效事件绑定 bindtap“changeColor” 实现按钮点击交互定时器 setInterval 实现自动轮播clearInterval 防止泄漏生命周期 onLoad 初始化、onUnload 清理资源样式与逻辑分离 WXSS 管布局JS 管颜色互不干扰八、后续可扩展方向把两行诗改成四行每句一行用数组 wx:for 渲染代码会更简洁加入背景色同步变化做成“整页换肤”效果增加一个“暂停/继续”开关练习 clearInterval 与状态控制把颜色变化做成渐变过渡动画使用 CSS transition 提升观感。

相关新闻

SpringBoot+Vue3+MyBatis家教管理系统设计与前后端分离实战

SpringBoot+Vue3+MyBatis家教管理系统设计与前后端分离实战

先聊几句实在的。这套“Java SpringBootVue3MyBatis 家教管理系统”,我看过不少类似项目,也帮人改过几版,第一感受是:它在一个非常典型的业务场景里,把前后端分离、权限控制、业务状态流转这些后端开发的核心知识点全串…

2026/10/14 14:03:11 阅读更多 →
FreeSWITCH高可用实战:keepalived主备切换与避坑指南

FreeSWITCH高可用实战:keepalived主备切换与避坑指南

简介:这份资源面向运维工程师与VoIP通信系统开发者,聚焦Freeswitch高可用架构的落地实践,通过Keepalived实现主备节点故障自动切换,解决单点故障导致通信服务中断的问题。资源包共4个文件,约38KB,包含2个Sh…

2026/10/14 14:03:11 阅读更多 →
Oracle数据库运维案例实战:从DG同步到AWR定位与巡检脚本

Oracle数据库运维案例实战:从DG同步到AWR定位与巡检脚本

简介:这是一份面向Oracle数据库运维与DBA人员的案例型PPT课件,聚焦RAC集群环境下的故障分析与处置流程。内容以真实错误日志为主线,逐一剖析IPC Send timeout、LMS/LMD锁管理进程通信异常、实例成员资格不一致、脑裂驱逐以及ORA-29740报错等典…

2026/10/14 14:03:11 阅读更多 →

最新新闻

Pandas线性插值实战:空气质量数据异常值与缺失值处理

Pandas线性插值实战:空气质量数据异常值与缺失值处理

这段时间帮某个环境监测项目处理城市空气质量数据,遇到最多的不是模型效果差,而是数据本身的问题。一套PM2.5、PM10、NO2、SO2浓度数据拿过来,缺失值、异常值、重复记录混在一起,直接建模结果根本没法看。把这些数据清洗干净&…

2026/10/14 14:37:53 阅读更多 →
Res2dmod二维正演原理与地形建模实战指南

Res2dmod二维正演原理与地形建模实战指南

简介:本资源为地球物理勘探领域专业正演软件Res2dmod的完整安装包,面向地质勘查、矿产与石油勘探、环境及工程地质等方向的科研人员与高年级本科生/研究生,用于开展二维高密度电法正演模拟与反演建模。包内共5个文件:setup.exe与s…

2026/10/14 14:37:53 阅读更多 →
Feature-level SMOTE:破解PHM故障诊断中的类别不平衡难题

Feature-level SMOTE:破解PHM故障诊断中的类别不平衡难题

1. 从一次翻车的轴承故障诊断说起去年帮一个做风电齿轮箱状态监测的团队调模型,他们手里有三年多的振动数据,正常样本几十万条,早期微弱故障样本满打满算不到三百条。当时用常规的SMOTE在原始时序上做增强,训练集AUC能刷到0.98&am…

2026/10/14 14:37:53 阅读更多 →
Python第4周循环与列表常见错误深度复盘

Python第4周循环与列表常见错误深度复盘

1. 这不是一份普通作业复盘,而是一份“Python语法肌肉记忆”养成指南你打开浏览器,输入“Python语言程序设计第4周测验练习题复盘”,页面跳出的多半是零散的答案截图、几道题的简短解析,或者某个学生在论坛里发的“求大佬帮看第3题…

2026/10/14 14:37:53 阅读更多 →
博弈论:从棋局到现实决策的策略思维工具

博弈论:从棋局到现实决策的策略思维工具

我最早在书架上看《博弈论》这类书时,第一反应是:这是教人下棋打牌的书吗?“博弈”两个字听起来就像棋盘上的事,翻了几页才发现完全跑偏了。它不是教你怎么下棋,而是在回答一个更底层的问题:当我的决定会影…

2026/10/14 14:37:53 阅读更多 →
WSL2 GPU直通实战:在Windows上搭建深度学习与大模型微调环境

WSL2 GPU直通实战:在Windows上搭建深度学习与大模型微调环境

做 AI 开发,环境折腾永远是逃不掉的课题。以前我在 Windows 上跑深度学习,常用方案各有各的别扭:双系统切换要重启,传统虚拟机里 GPU 基本是摆设,Docker Desktop 又总在资源隔离上出问题。后来把 WSL2 这套组合拳打顺了…

2026/10/14 14:36:51 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →