【Html网页模板】用 Canvas 打造可交互的“矩阵雨”效果
目录
-
- 专栏导读
- 前言
- 功能亮点
- 项目结构
- 实现思路概览
- 关键代码片段(精简)
- 使用说明
- 扩展建议
- 结语
专栏导读
🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注
👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅
🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅
📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
❤️ 欢迎各位佬关注! ❤️
前言
-
这篇文章带你一步步拆解一个可高度自定义的“代码雨”网页:支持随机颜色、彩虹渐变与经典矩阵绿三种配色模式,带光晕特效、可调速度/密度/字号、全屏与暂停,以及移动端手势交互。
-
本地预览:在项目目录执行
python -m http.server 8080
,然后访问http://localhost:8080/
-
运行环境:现代浏览器(Chrome/Edge/Firefox/Safari 等)
功能亮点
- 三种配色模式 + 自定义颜色:随机、彩虹渐变、经典矩阵绿、自定义色
- 光晕发光效果:阴影叠加营造霓虹质感,可一键开关
- 控制面板:速度、密度、字号、光晕、配色、自定义颜色、隐藏/显示 UI、全屏、暂停
- 窗口自适应:随窗口变化自动调整画布与列数
- 移动端手势:轻触暂停/继续,双击切换控制面板显示
项目结构
├── index.html # 页面结构:全屏 Canvas + 控制面板├── style.css # 深色主题、磨砂面板与响应式样式└── script.js # Canvas 动画循环、颜色模式、交互逻辑
实现思路概览
1) 全屏 Canvas 与拖影背景
-
每帧用半透明黑色铺满画布,形成“拖影”尾迹:
function drawBackground(ctx, canvas) { ctx.fillStyle = \'rgba(0, 0, 0, 0.1)\'; ctx.fillRect(0, 0, canvas.width, canvas.height);}
2) 列模型与下落逻辑
-
按屏幕宽度划分为若干列,每列维护当前行 y 与列速度 speed:超过底部后从顶部随机位置重新落下,速度带少量随机扰动,画面更自然。
3) 颜色模式
-
随机:每次字符绘制随机色相
-
彩虹:全局 hue 随时间循环,叠加列偏移形成彩虹扫动
-
矩阵绿:固定颜色 `#00ff66`
-
自定义:使用颜色选择器
4) 发光效果
利用 shadowBlur
与 shadowColor
实现霓虹发光,可通过控制面板开关。
5) 动画与性能
requestAnimationFrame
驱动主循环;通过拖影减少重绘内容;字体、列宽、列数在 resize
时统一重算,避免每帧开销。
关键代码片段(精简)
-
颜色模式选择(HSL 让渐变自然顺滑):
function pickColor(i, mode, hue, customColor) { switch (mode) { case \'matrix\': return \'#00ff66\'; case \'rainbow\': { const h = (hue + i * 10) % 360; return `hsl(${h}, 90%, 60%)`; } case \'custom\': return customColor; case \'random\': default: return `hsl(${Math.floor(Math.random() * 360)}, 90%, 60%)`; }}
-
单列绘制与下落逻辑(含发光与速度扰动):
function drawColumn(ctx, canvas, state, fontSize, glow, color) { const { columns, cols } = state; for (let i = 0; i < cols; i++) { const col = columns[i]; const x = (i + 0.5) * (canvas.width / cols); const steps = Math.max(1, Math.floor(col.speed)); for (let s = 0; s < steps; s++) { const char = state.chars[(Math.random() * state.chars.length) | 0]; const yPos = col.y * fontSize; ctx.fillStyle = color(i); ctx.shadowBlur = glow ? 20 : 0; ctx.shadowColor = ctx.fillStyle; ctx.textAlign = \'center\'; ctx.textBaseline = \'top\'; ctx.fillText(char, x, yPos); col.y += 1; if (col.y * fontSize > canvas.height + 50) { col.y = -Math.floor(Math.random() * 20); col.speed = 1 + Math.random() * state.speed; } } }}
使用说明
1) 启动本地预览
-
在项目目录打开终端执行:
python -m http.server 8080
-
然后访问:`http://localhost:8080/`
2) 控制面板
-
下落速度、字符密度、字体大小:用滑块实时调节
-
光晕效果:开/关
-
配色模式:随机 / 彩虹 / 矩阵绿 / 自定义(可选任意色)
-
隐藏/显示 UI、全屏模式、暂停/继续
3) 移动端手势
-
轻触:暂停/继续
-
快速双击:显示/隐藏控制面板
扩展建议
- 尾迹强度调节:把拖影透明度做成滑块(例如 0.05~0.2)
- 字符集切换:增加字母/汉字/符号预设选项
- 截图/录制:用
canvas.toDataURL()
保存截图,或用MediaRecorder
录制 - FPS 限制:用时间戳控制绘制频率,适配性能较弱设备
- WebGL/着色器版本:用 WebGL/WebGPU 实现更炫的粒子/流体效果
结语
-
这个“代码雨”示例展示了如何用原生 Canvas 打造高自由度的可视化特效,并结合 UI 控件与移动端手势提升可玩性。你可以在此基础上继续拓展,例如加上音乐可视化、与鼠标交互的风场、或引入粒子系统实现更丰富的视觉语言。
-
希望对初学者有帮助;致力于办公自动化的小小程序员一枚
-
希望能得到大家的【❤️一个免费关注❤️】感谢!
-
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
-
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
-
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
-
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏