使用canvas实现代码雨高级升阶版【附带源码和使用方法】

文章目录

  • 前言
  • 基本绿色的
  • 彩色版本
  • 飘散雪花状
  • 后言

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:前端面试
🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力

基本绿色的

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;overflow: hidden;}</style>
</head><body><canvas id="canvas"></canvas><script src="index.js"></script></body></html>
let canvas = document.querySelector("canvas")let ctx = canvas.getContext("2d");canvas.width = screen.availWidth;
canvas.height = screen.availHeight;let str = "鋜 斗 z s y y d s 加 油 干".split(" ");let arr = Array(Math.ceil(canvas.width / 10)).fill(0);
const rain = () => {ctx.fillStyle = "rgba(0,0,0,0.05)";ctx.fillRect(0, 0, canvas.width, canvas.height);ctx.fillStyle = "#0f0";arr.forEach((item, index) => {ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 10, item + 10)arr[index] = item > canvas.height || item > Math.random() * 10000 ? 0 : item + 10;})
}setInterval(rain, 40)

彩色版本

在这里插入图片描述
html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;overflow: hidden;}</style>
</head><body><canvas id="canvas"></canvas><script src="index.js"></script></body></html>

js

let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
canvas.width = screen.availWidth;
canvas.height = screen.availHeight;let str = "鋜 斗 z s y y d s 加 油 干".split(" ");let arr = Array(Math.ceil(canvas.width / 10)).fill(0);
const colors = ["#0f0", "#f00", "#00f", "#ff0", "#0ff"]; // 添加颜色数组const rain = () => {ctx.fillStyle = "rgba(0,0,0,0.05)";ctx.fillRect(0, 0, canvas.width, canvas.height);arr.forEach((item, index) => {const randomColor = colors[Math.floor(Math.random() * colors.length)]; // 随机选取颜色ctx.fillStyle = randomColor; // 使用随机颜色ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 10, item + 10);arr[index] = item > canvas.height || item > Math.random() * 10000 ? 0 : item + 10;});
};setInterval(rain, 40);

飘散雪花状

在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;overflow: hidden;}</style>
</head><body><canvas id="canvas"></canvas><script src="index.js"></script></body></html>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
canvas.width = screen.availWidth;
canvas.height = screen.availHeight;let str = "鋜 斗 加 油 猛 猛 干 ".split(" ");
let strIndex = 0;let arr = Array(Math.ceil(canvas.width / 10)).fill(0);class Drop {constructor() {this.x = Math.random() * canvas.width;this.y = Math.random() * -canvas.height;this.speed = Math.random() * 2 + 2;this.color = "#" + Math.floor(Math.random() * 16777215).toString(16);this.height = Math.random() * 20 + 10;this.text = str[strIndex];strIndex = (strIndex + 1) % str.length;}update() {this.y += this.speed;if (this.y > canvas.height) {this.y = Math.random() * -canvas.height;this.x = Math.random() * canvas.width;this.color = "#" + Math.floor(Math.random() * 16777215).toString(16);this.height = Math.random() * 20 + 10;this.text = str[strIndex];strIndex = (strIndex + 1) % str.length;}}draw() {ctx.fillStyle = "rgba(0, 0, 0, 0.1)";ctx.fillRect(0, 0, canvas.width, canvas.height);ctx.fillStyle = "white";ctx.font = this.height + "px Arial";ctx.fillText(this.text, this.x, this.y + this.height);}
}let drops = [];for (let i = 0; i < 100; i++) {drops.push(new Drop());
}const animate = () => {drops.forEach((drop) => {drop.update();drop.draw();});requestAnimationFrame(animate);
};animate();

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235217.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ -- 每日选择题 -- Day2

第一题 1. 下面代码中sizeof(A)结果为&#xff08;&#xff09; #pragma pack(2) class A {int i;union U{char str[13];int i;}u;void func() {};typedef char* cp;enum{red,green,blue}color; }; A&#xff1a;20 B&#xff1a;21 C&#xff1a;22 D&#xff1a;24 答案及解析…

windows文件删除权限

一、普通文件 这里指的是所有可以被随意删除的文件。 二、可更改权限的文件 如果想要删除的文件无法被删除&#xff0c;那大概是权限不够&#xff0c;这时候&#xff1a;鼠标右键、属性、安全、编辑、选择相应的组或用户&#xff08;如果不知道哪个可以全选&#xff0c;反正…

MySQL C代码连接

环境&#xff1a;5.7.42-0ubuntu0.18.04.1 (Ubuntu) mysql接口介绍 初始化mysql指针 用来生成MySQL对象&#xff0c;返回值为MySQL*&#xff0c;MySQL*是MySQL对象的指针。 MySQL在mysql.h中是一个结构体 链接数据库 初始化完毕之后&#xff0c;必须先链接数据库&#xff…

App测试、H5测试及小程序测试

文章目录 前言一、App常见测试要点1.App功能测试1.1.App安装与卸载1.2.App升级测试1.3.App登陆测试1.4.离线测试1.5.触屏及操作测试1.6.App消息推送测试 2.AppUI界面测试3.App兼容性测试-适配/手机适配4.App中断测试5.App网络测试6.App安全测试7.App性能测试8.App测试与web测试…

数据结构(六):堆介绍及面试常考算法

一、堆介绍 1、定义 堆是一种图的树形结构&#xff0c;被用于实现“优先队列”&#xff08;priority queues&#xff09;。优先队列是一种数据结构&#xff0c;可以自由添加数据&#xff0c;但取出数据时要从最小值开始按顺序取出。在堆的树形结构中&#xff0c;各个顶点被称…

2023.11.27 使用anoconda搭建tensorflow环境

2023.11.27 使用anoconda搭建tensorflow环境 提供一个简便安装tensorflow的方法 1. 首先安装anoconda&#xff0c;安装过程略&#xff0c;注意安装的时候勾选安装anoconda prompt 2. 进入anoconda prompt 3. 建立python版本 conda create -n tensorflow1 python3.84. 激活t…

融资经理简历模板

这份简历内容&#xff0c;以综合柜员招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴。 融资经理简历在线编辑下载&#xff1a;百度幻主简历 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;融资经理 …

VIR-SLAM代码分析3——VIR_VINS详解之estimator.cpp/.h

前言 续接上一篇&#xff0c;本本篇接着介绍VIR-SLAM中estimator.cpp/.h文件的函数&#xff0c;尤其是和UWB相关的相比于VINS改动过的函数&#xff0c;仍然以具体功能情况代码注释的形式进行介绍。 重点函数介绍 优化函数&#xff0c;代码是先优化&#xff0c;后边缘化。 …

java学校高校运动会报名信息管理系统springboot+jsp

课题研究方案&#xff1a; 结合用户的使用需求&#xff0c;本系统采用运用较为广泛的Java语言&#xff0c;springboot框架&#xff0c;HTML语言等关键技术&#xff0c;并在idea开发平台上设计与研发创业学院运动会管理系统。同时&#xff0c;使用MySQL数据库&#xff0c;设计实…

计算机网络(二)

&#xff08;八&#xff09;客户端软件设计的细节 A、解析协议号 客户端可能会需要通过协议名指定协议&#xff0c;但是Socket接口是用协议号指定的&#xff0c;这时候我们就需要使用getprotobyname()函数实现协议名到协议号的转换&#xff0c;该函数会返回一个指向protoent的…

Lighthouse(灯塔)—— Chrome浏览器强大的性能测试工具

本文浏览器版本参考如下&#xff1a; 一、认识Lighthouse Lighthouse 是 Google 开发的一款工具&#xff0c;用于分析网络应用和网页&#xff0c;收集现代性能指标并提供对开发人员最佳实践的意见。 为 Lighthouse 提供一个需要审查的网址&#xff0c;它将针对此页面运行一连…

佳易王物流快运物流单打印登记查询系统软件操作教程

一、前言&#xff08;编程应用实例系列&#xff09;&#xff1a; 佳易王物流快运物流单打印登记查询系统软件操作教程 软件有试用版&#xff0c;可以下载试用&#xff0c;了解软件操作和软件功能。 软件试用版下载可以点击最下方官网卡片 软件为绿色免安装版&#xff0c;下载…