黑客二进制雨(html实现)

199 阅读1分钟

直接上代码

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>MGT-404</title>
		<style>
			* {
				margin: 0;
				padding: 0;
			}
 
			body {
				background: black;
			}
 
			canvas {
				display: block;
			}
		</style>
	</head>
	<body>
		<canvas id="ad"></canvas>
		<script>
			//获取画布对象
			var ad = document.getElementById("ad");
			//设置画布展示为2d
			var ctx = ad.getContext("2d");
			//设置canvas的宽度和高度
			ad.height = window.innerHeight;
			ad.width = window.innerWidth;
			//展示的文字
			var chinese = randomChars(num1);
			//字符串转为数组
			chinese = chinese.split("");
			//设置字体大小
			var font_size = 10;
			//计算列
			var columns = ad.width / font_size;
			//记录每列文字的y轴坐标
			var drops = [];
			//给每一个文字初始化一个起始点的位置
			for (var x = 0; x < columns; x++) drops[x] = 1;
 
			//绘画的函数
			function draw() {
				//布满全屏的黑色遮罩层
				ctx.fillStyle = "rgba(0, 0, 0, 0.05)";
				ctx.fillRect(0, 0, ad.width, ad.height);
				ctx.fillStyle = "#0F0";
				//设置字体样式
				ctx.font = font_size + "px arial";
				//写入画布中
				for (var i = 0; i < drops.length; i++) {
					//随机生成文字
					var text = chinese[Math.floor(Math.random() * chinese.length)];
					ctx.fillText(text, i * font_size, drops[i] * font_size);
					//如果文字的Y轴坐标大于画布的高度,1/100*colunms概率将该文字的Y轴坐标重置为0
					if (drops[i] * font_size > ad.height && Math.random() > 0.975)
						drops[i] = 0;
					//文字Y轴坐标+1
					drops[i]++;
				}
			}
			//流动速度
			setInterval(draw, 50);
		</script>
	</body>
</html>