> 技术文档 > 【Html网页模板】用 Canvas 打造可交互的“矩阵雨”效果

【Html网页模板】用 Canvas 打造可交互的“矩阵雨”效果

【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) 发光效果

利用 shadowBlurshadowColor 实现霓虹发光,可通过控制面板开关。

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基础学习专栏