微信小程序实战:实现诗句文字颜色自动随机变化效果
前言在微信小程序开发中动态改变页面元素的样式是一项非常基础且实用的技能。今天我将通过一个完整的实战案例带大家实现一个“诗句文字颜色自动随机变化”的小程序。这个案例的最终效果是页面上展示一首诗包含标题、作者、正文每隔几秒钟每行诗的颜色会自动随机变化一次同时提供一个按钮点击按钮也能立即改变颜色所有生成的颜色数据会打印在控制台中。通过这个案例你将学到如何使用setInterval实现定时任务如何利用Math.random()生成随机十六进制颜色如何通过this.setData()驱动视图更新如何利用生命周期函数onLoad初始化数据一、项目创建与基础配置1.1 新建项目打开微信开发者工具创建一个新项目项目名称自动随机变化的颜色后端服务选择“不使用云服务”模板选择选择“不使用模板”1.2 修改 app.json为了让页面有更好的渲染兼容性我们需要在app.json中指定渲染引擎为webview。完整配置如下json{ pages: [ pages/index/index ], window: { navigationBarTextStyle: black, navigationStyle: custom }, style: v2, renderer: webview, componentFramework: glass-easel, sitemapLocation: sitemap.json, lazyCodeLoading: requiredComponents }二、页面结构搭建WXML在pages/index/index.wxml中我们使用navigation-bar作为自定义导航栏用scroll-view包裹主体内容。核心思路是外层view内部嵌套一个标题、一个作者、一个包含 4 行诗句的容器以及一个按钮。每一行诗句通过stylecolor:{{colors[i]}}绑定数据。html!--index.wxml-- navigation-bar title自动随机变化的颜色 back{{false}} colorblack background#FFF/navigation-bar scroll-view classscrollarea scroll-y typelist view classbox view classtitle望庐山瀑布/view view classsubtitle李白/view view classflex-wrap view stylecolor:{{colors[0]}}日照香炉生紫烟/view view stylecolor:{{colors[1]}}遥看瀑布挂前川。/view view stylecolor:{{colors[2]}}飞流直下三千尺/view view stylecolor:{{colors[3]}}疑是银河落九天。/view /view button typeprimary bind:tapchangeColor改变颜色/button /view /scroll-view这里colors是一个数组索引 0-3 分别对应四行诗的颜色值我们在 JS 中动态生成并赋值。三、样式美化WXSS3.1 页面样式 index.wxsscss/**index.wxss**/ page { height: 100vh; display: flex; flex-direction: column; } .scrollarea { flex: 1; overflow-y: hidden; } .flex-wrap { margin-top: 40rpx; font-size: 40rpx; text-align: center; line-height: 2em; letter-spacing: 1em; } button { margin-top: 40rpx; margin-bottom: 40rpx; }3.2 全局样式 app.wxss在app.wxss中我们定义盒子边框和标题样式css/**app.wxss**/ .box { margin: 20rpx; padding: 20rpx; border: 2rpx solid red; } .title { font-size: 40rpx; font-weight: bolder; text-align: center; margin-bottom: 30rpx; color: pink; }到这里页面就有了一个带红框的盒子里面包含标题、作者、诗句和按钮。四、核心逻辑实现JS这是整个案例的核心部分。我们需要在index.js中完成三件事在onLoad生命周期中启动定时器每隔 5 秒调用一次生成颜色的方法。定义changeColor方法响应按钮点击立即生成一次颜色。定义createColor方法用于生成 4 个随机的十六进制颜色并更新数据。完整代码如下javascript//index.js Page({ data: { colors: [] }, // 生命周期函数--监听页面加载 onLoad() { // 页面加载时先执行一次生成颜色 this.createColor() // 每隔5秒改变一次颜色 setInterval(() { this.createColor() }, 5000) }, // 点击按钮时的事件响应函数 changeColor() { this.createColor() }, // 创建四种随机颜色 createColor() { let colors [] // 定义十六种颜色字符集 const letters 0123456789ABCDEF // 外层循环控制生成4种颜色 for (let i 0; i 4; i) { // 十六进制颜色前面的符号 let c # // 内层循环控制生成一种十六进制的颜色例如 #208AB for (let j 0; j 6; j) { c letters[Math.floor(Math.random() * 16)] } // 将生成的颜色数存入数组中 colors.push(c) } // 在控制台打印数组 console.log(colors) // 将生成的颜色数据更新到页面 this.setData({ colors: colors }) } })代码要点解析Math.random()生成[0, 1)之间的随机小数。Math.floor()向下取整。Math.floor(Math.random() * 16)可以随机得到 0~15 之间的整数正好对应letters字符串的索引。letters字符集包含十六进制所需的0-9和A-F共 16 个字符。循环 6 次就能拼出一个完整的六位十六进制颜色码如#A3F2B8。setInterval周期函数第一个参数是回调函数第二个参数是执行间隔毫秒。这里设为 5000 毫秒即 5 秒。this.setData({})小程序中改变数据并驱动 WXML 重新渲染的唯一方式。直接修改this.data是无效的。五、功能扩展让标题颜色跟随第一行诗题目要求“标题的颜色也定时随机改变跟第一行诗的正文颜色相同”。实现起来非常简单5.1 修改 WXML将标题的view修改为htmlview classtitle stylecolor:{{colors[0]}};望庐山瀑布/view5.2 修改 WXSS在app.wxss中把.title里的color: pink;删除或注释掉。因为如果保留固定颜色会覆盖掉内联的动态颜色。现在标题会始终和第一行诗colors[0]保持同一个颜色无论是定时触发还是按钮点击触发二者都会同步变化。六、最终效果与调试完成以上步骤后点击开发者工具上方的“编译”按钮页面会展示一首诗四行诗句颜色各不相同且都是随机生成的。每隔 5 秒四行诗的颜色会自动刷新一次。点击“改变颜色”按钮颜色立即刷新。打开控制台Console可以看到每次生成的颜色数组被打印出来例如text[#A3F2B8, #D81E06, #FF5722, #3F51B5]七、总结这个案例虽然简单但涉及了小程序开发中的几个重要知识点数据绑定通过{{}}在 WXML 中引用 JS 中的数据。事件绑定通过bind:tap将按钮点击与 JS 方法关联。定时器setInterval实现周期性任务。随机数生成与字符串拼接构造十六进制颜色码。生命周期onLoad在页面加载时执行初始化逻辑。掌握这些基础后你可以尝试进一步扩展例如使用 CSS 过渡动画让颜色变化更平滑、增加暂停/继续按钮控制定时器、或者把颜色生成逻辑封装成独立工具函数等。希望这篇实战教程能帮你理解小程序中动态样式的实现思路。如果你在实践过程中遇到问题欢迎在评论区交流讨论。本文首发于个人技术博客转载请注明出处。

相关新闻

AgentScope Java v2 第2课,ReActAgent 的循环引擎

AgentScope Java v2 第2课,ReActAgent 的循环引擎

开场:三个预测,三个全错 上一课看的是事件怎么流,这一课看循环怎么停。结论先摆桌上:ReAct 循环有三种收场——正常收束、打满降级、用户中断,前两种都以 RUN_FINISHED 结束,RUN_ERROR 只留给流上真正的 T…

2026/10/17 2:40:38 阅读更多 →
Qt Quick与QML从零上手:声明式界面开发实战路线

Qt Quick与QML从零上手:声明式界面开发实战路线

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

2026/10/17 2:40:38 阅读更多 →
锂电串联主动均衡原理与MP2642GR-Z+PIC18F47K40实战设计

锂电串联主动均衡原理与MP2642GR-Z+PIC18F47K40实战设计

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

2026/10/17 2:40:38 阅读更多 →

最新新闻

Ray多机启动实战:大模型推理GPU集群调度与排障

Ray多机启动实战:大模型推理GPU集群调度与排障

最近在做一套多机大模型推理服务,模型权重分散在几台GPU机器上,头一回用Ray往多个节点拉起进程的时候,我犯了个很低级的错误:只在head节点执行了ray start --head,然后在另一台机器上敲了半天ray start --address...&a…

2026/10/17 3:24:49 阅读更多 →
Bootstrap 3 侧边导航栏生产级实现方案

Bootstrap 3 侧边导航栏生产级实现方案

简介:本资源是一份基于Bootstrap 3框架实现的响应式侧边导航栏完整示例,面向前端初学者与Web开发人员,解决在传统网页中快速构建结构清晰、适配多端(尤其移动端折叠交互)的垂直导航结构问题。压缩包共9个文件&#xff…

2026/10/17 3:24:49 阅读更多 →
OpenCV文档图像增强实战:从光照不均到高精度OCR预处理

OpenCV文档图像增强实战:从光照不均到高精度OCR预处理

1. 文档图像增强到底在解决什么问题做过文档扫描、拍照存档或者OCR识别的人,大概率都遇到过这样的场景:手机拍了一张纸质合同,光线不均匀,左边亮右边暗,中间还有一道阴影;或者用扫描仪扫出来的老文档&#…

2026/10/17 3:24:49 阅读更多 →
桌面端微信接入实战:用Claw中间件打通个人微信消息自动化

桌面端微信接入实战:用Claw中间件打通个人微信消息自动化

身边不少折腾过微信自动化的朋友,最后都卡在同一个地方:手机端的机器人方案要么要求系统环境特殊,要么长期挂着不稳定;云端方案又拿不到个人微信的完整会话数据,用起来总觉得隔了一层。我自己的需求其实很朴素——想把…

2026/10/17 3:24:49 阅读更多 →
TCP可靠传输与流量控制:滑动窗口、重传机制与RTO算法全解析

TCP可靠传输与流量控制:滑动窗口、重传机制与RTO算法全解析

很多同学学到“TCP 可靠传输与流量控制”这一篇时,第一反应往往是“又要背一堆机制和参数”。确实,这一篇是计网里知识点最密集的章节之一,但如果你只知道“超时重传”“滑动窗口”这六个字,考场上照样容易翻车。我带过不少学生&a…

2026/10/17 3:24:49 阅读更多 →
AVPlayer打造资讯App级列表视频流:UITableView自动播放与Cell复用实践

AVPlayer打造资讯App级列表视频流:UITableView自动播放与Cell复用实践

简介:面向苹果设备开发者的列表视频播放功能示例,使用Objective-C编写,模仿网易视频与今日头条的交互体验,能够解决列表滚动预览、点击全屏与自动暂停等常见需求。工程覆盖UITableView/UICollectionView上的视频滚动播放、AVFound…

2026/10/17 3:23:48 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →