微信小程序实战:自动随机变化的颜色 —— 随机颜色生成、定时刷新与按钮交互

发布时间:2026/10/14 15:00:09

微信小程序实战:自动随机变化的颜色 —— 随机颜色生成、定时刷新与按钮交互 在微信小程序开发中动态改变界面元素的样式是很常见的需求。本文以古诗《望庐山瀑布》为例演示如何生成随机十六进制颜色、每 5 秒定时刷新每行诗的颜色并通过按钮手动触发变色同时在控制台打印出每一行诗对应的颜色。1 案例背景很多页面需要通过动态样式来提升视觉效果例如让文字颜色随机变化。本案例利用 JavaScript 的 Math.random ()、Math.floor () 生成随机的十六进制颜色结合小程序的数据绑定setData驱动界面刷新实现 每行诗一个随机颜色、定时自动变化、按钮手动变化 的效果。2 案例目标与实现效果在页面上展示古诗《望庐山瀑布》包括标题、作者和四行正文样式美观页面下方提供一个 改变颜色 按钮。实现效果小程序启动后四行诗以不同颜色显示每隔 5 秒每行诗的颜色随机变化一次点击 改变颜色 按钮颜色也立即随机变化同时控制台打印出每次生成的 4 个颜色组成的数组每个元素对应一行诗的颜色。3 技术要点3.1 Math.random () 与 Math.floor ()Math.random () 生成 [0, 1) 之间的随机小数Math.floor () 向下取整。二者结合可以从 0123456789ABCDEF 中随机取出一个十六进制字符循环 6 次拼出一个类似 #F208AB 的颜色值。3.2 数据绑定与 setDataWXML 中通过 stylecolor: {{colors [0]}} 将颜色数据绑定到视图逻辑层调用 this.setData ({}) 修改 data 中的值驱动视图更新。3.3 setInterval 定时器setInterval 按固定间隔反复执行回调函数本案例用它实现每 5 秒自动调用变色函数。3.4 事件绑定与 onLoad按钮通过 bind:tapchangeColor 绑定点击事件onLoad 是页面生命周期函数页面加载时触发一次适合在页面打开时生成初始颜色并启动定时器。4 实现步骤4.1 新建项目在微信开发者工具中新建一个不使用云服务、不使用模板的小程序项目。4.2 修改 app.json使用 webview 渲染引擎配置 renderer 为 webview。4.3 修改 index.wxml最外层 view 内部嵌套标题、作者、正文三个 view 和一个按钮正文 view 中再嵌套 4 个 view每个 view 显示一行诗通过 style 绑定对应颜色。4.4 修改 index.wxss编写标题、作者、正文、按钮的样式使页面美观。4.5 修改 app.wxss设置页面背景等全局样式。4.6 修改 index.js定义生成 4 种随机颜色的 changeColor () 函数、生命周期函数 onLoad () 和定时器changeColor () 同时作为按钮点击事件响应函数。5 功能扩展作业要求标题的颜色也定时随机改变且与第一行诗的正文颜色相同点击 改变颜色 按钮时标题颜色同步变化。实现方式把标题和第一行诗都绑定到颜色数组的第一个元素 colors [0]这样无论定时刷新还是点击按钮重新生成颜色后标题与第一行诗的正文颜色始终一致。6 关键代码6.1 index.wxml 关键片段view classpoem-title stylecolor: {{colors[0]}}望庐山瀑布/view view classpoem-body view classpoem-line stylecolor: {{colors[0]}}日照香炉生紫烟/view view classpoem-line stylecolor: {{colors[1]}}遥看瀑布挂前川。/view view classpoem-line stylecolor: {{colors[2]}}飞流直下三千尺/view view classpoem-line stylecolor: {{colors[3]}}疑是银河落九天。/view /view button classchange-btn bind:tapchangeColor改变颜色/button6.2 index.js 关键片段onLoad() { this.changeColor() this.timer setInterval(() { this.changeColor() }, 5000) } changeColor() { const letters 0123456789ABCDEF const colors [] // 外层循环控制生成 4 种颜色对应 4 行诗 for (let i 0; i 4; i) { // 十六进制颜色前面的符号 let c # // 内层循环控制生成一种十六进制的颜色例如 #F208AB for (let j 0; j 6; j) { c letters[Math.floor(Math.random() * 16)] } colors.push(c) } this.setData({ colors }) console.log(colors) }7 踩坑与注意事项定时器要在页面卸载onUnload时用 clearInterval 清除避免页面关闭后仍持续执行。Math.random () 可能生成相同的颜色这正是 每行诗的颜色可能相同也可能不同 的随机效果符合案例要求。十六进制颜色由 6 个字符组成注意每生成一种颜色都要重置为 # 开头。控制台打印的是整个数组开发调试时可以直接展开查看每一行诗对应的颜色。8 总结本案例利用 Math.random () 与 Math.floor () 生成随机十六进制颜色结合 setData 数据绑定、setInterval 定时器与按钮事件实现了古诗页面颜色随机变化的效果并完成了 标题颜色与第一行正文颜色一致 的功能扩展。掌握随机数、定时器与数据绑定三个知识点后可以进一步实现抽奖转盘、随机背景、动态主题等更丰富的交互效果。9 参考资料[1] 微信开放文档・框架接口 / 页面 / PagesetData—— Page(Object object) | 微信开放文档[2] MDN·Math.random() ——https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/random[3] MDN·setInterval() ——https://developer.mozilla.org/zh-CN/docs/Web/API/setInterval
延伸阅读

更多相关文章

2026/10/14 15:00:09

3d-force-graph实战:从力导向图原理到三维关系可视化调优

简介:面向中高级 Web 前端开发者的 3D 力导向图组件资源,基于 ThreeJS/WebGL 实现三维渲染,并借助 d3-force-3d 或 ngraph 物理引擎完成力导向迭代布局,适合可视化复杂网络、知识图谱、社交关系与多节点联动等数据场景&#xff0c…

2026/10/14 15:00:09

异常检测基础模型:从范式迁移到生产落地的完整指南

ICML 2026的投稿方向里,"异常检测基础模型"是我这段时间盯得最紧的一个议题。说实话,异常检测这个方向以前在顶会上一直有点"边缘"——大家觉得它问题定义清楚、方法套路固定,很难做出让人眼前一亮的东西。但这两年情况明…

2026/10/14 16:10:37

LightGBM自定义F1评测与Focal Loss损失函数实战指南

1. 为什么LightGBM原生不支持F1 Score,却还要费劲写自定义函数?LightGBM在工业级模型训练中被广泛使用,不是因为它“最先进”,而是它在精度、速度、内存占用三者之间找到了极难复制的平衡点。但它的设计哲学很务实:只内…

2026/10/14 16:10:37

Levenberg-Marquardt算法Matlab实现:非线性最小二乘拟合与参数调优

简介:这份资源面向需要在Matlab中实现非线性最小二乘参数拟合的科研人员、工程师与学生,核心是Levenberg-Marquardt算法的可运行代码。LM算法融合梯度下降与牛顿法优势,通过迭代调整参数最小化残差平方和,在Hessian矩阵正定与不定…

2026/10/14 16:10:37

LightGBM自定义F1指标与Soft-F1损失实战指南

1. 为什么LightGBM原生不支持F1 Score,而你却总在调参时被它卡住?LightGBM作为工业界扛鼎级梯度提升框架,速度快、内存省、精度高,几乎成了结构化数据建模的默认选项。但凡做过二分类或多分类任务的开发者,都绕不开一个…

2026/10/14 16:10:37

论文结构像一团乱麻?师姐安利这几个AI论文软件

一、中文论文全流程首选:千笔AI(教授力荐) 定位:中文学术写作天花板,全流程覆盖,适配国内高校 / 期刊规范。核心优势(教授最看重): 20秒出大纲:输入研究方向&…

2026/10/14 16:10:37

C标准库源码阅读指南:从printf到malloc的实现解析

简介:C标准库是C语言的核心基础,其完整源代码包覆盖常用标准库模块,适合希望深入理解内存管理、字符串处理、输入输出与数学运算底层原理的C语言学习者及系统级开发人员。包体内共1266个文件,压缩后仅1.74MB,以559个C源…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/13 17:09:18

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/14 0:00:33

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

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

2026/10/14 0:00:33

macOS/iOS高精度计时:mach_absolute_time原理与实战

1. 项目概述:为什么mach_absolute_time是 macOS/iOS 时间测量的“黄金标准”在 macOS 和 iOS 开发中,我见过太多人用CFAbsoluteTimeGetCurrent()或NSDate.timeIntervalSinceReferenceDate做性能打点,结果在高精度场景下被系统时钟跳变、NTP 同…

2026/10/14 0:00:33

SCORM课件演示与测试全解析:从API通信到自动化验证

简介:这是一套遵循SCORM标准的交互式课件演示与测试资源,面向E-Learning课程开发者、LMS平台测试人员及在线教学从业者,用于验证课件在不同学习管理系统中的识别、传递与跟踪能力。压缩包共28个文件,约12.07MB,以swf动…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑