黑客帝国代码雨以及其灵活使用——道家真言!!(附带相关知识点)

黑客帝国代码雨以及其灵活使用——道家真言!!(附带相关知识点)canvasid myCanvas script consts window screen constw myCanvas width s width consth myCanvas height s height constctx myCanvas getContext 2d constp Array Math floor w 10 1 fill 0 con script canvasid myCanvas

效果展示

1.黑客帝国代码雨

黑客帝国代码雨


2.道家真言

代码雨衍生——到家真言


模板下载地址

1.说明

  模板我上传到CSDN资源了,不需要积分就可以下载的,大家随便去,模板把html,js,css分开了,好歹标准些,别从我这直接复制,很丑,哈哈,符合规范一些,去下载一个,再次声明不要积分的(发生了点儿我不知道的情况,没传过资源,不知道为什么,我设置的是0积分,可是他自己涨上去了…)。????


2.黑客帝国代码雨下载

黑客帝国代码雨下载点这里


3.道家真言下载

道家真言下载点这里


代码实现


1.黑客帝国代码雨

 <html lang="en"> <head> <meta charset="UTF-8"> <title>Code 
           title> <style> body{ 
            margin: 0; overflow: hidden; }  
            style>  
             head> <body> <canvas id="myCanvas"> 
              canvas> <script> const width = document.getElementById("myCanvas").width = screen.availWidth; const height = document.getElementById("myCanvas").height = screen.availHeight; const ctx = document.getElementById("myCanvas").getContext("2d"); const arr = Array(Math.ceil(width / 10)).fill(0); const str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0".split(""); function rain() { 
               //这里的重点就是每次调用这个方法的时候都会重新绘制一张透明度为0.05的黑色画布来覆盖前图 //所以就会形成人眼中的下雨效果 ctx.fillStyle = "rgba(0,0,0,0.05)"; ctx.fillRect(0, 0, width, height); ctx.fillStyle = "#0f0"; arr.forEach(function (value, index) { 
               ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 10, value + 10); arr[index] = value >= height || value > 8888 * Math.random() ? 0 : value + 10; }); } setInterval(rain, 30);  
               script>  
                body>  
                 html> 

2.道家真言

 <html lang="en"> <head> <meta charset="UTF-8"> <title>Taoism 
            title> <style> body{ 
             margin: 0; overflow: hidden; }  
             style>  
              head> <body> <canvas id="myCanvas"> 
               canvas> <script> const width = document.getElementById("myCanvas").width = screen.availWidth; const height = document.getElementById("myCanvas").height = screen.availHeight; const ctx = document.getElementById("myCanvas").getContext("2d"); //因为后面一个字50px,所以用总宽度除以50恰好够用,不至于浪费资源 const arr = Array(Math.ceil(width / 50)).fill(0); //这里为了不出现下坠的视觉效果,所以加了很多空格,大家感兴趣可以把空格去了,自己看看什么效果。 const str = "临兵斗者皆阵列前行乾坤震巽坎离艮兑 ".split(""); function rain() { 
                ctx.fillStyle = "rgba(0,0,0,0.05)"; ctx.fillRect(0, 0, width, height); ctx.fillStyle = "#f00"; arr.forEach(function (value, index) { 
                ctx.font = "50px 华文行楷"; ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 50, value + 50); arr[index] = value >= height || value > 8888 * Math.random() ? 0 : value + 50; }); } setInterval(rain, 50);  
                script>  
                 body>  
                  html> 

相关方法的介绍

  这里我会向大家介绍上面一些JavaScript方法的使用,主要对象是和我差不多的小白???,所以高手请自动忽略,哈哈,不过说错的地方依旧需要指点的,请在评论区批评指正,谢谢。


1.style标签

 <style> body{ 
              margin: 0; overflow: hidden; }  
              style> 

  这里面写的是设置body标签里面样式,margin为外边距,给大家看看0和不是0的效果:
margin为0
  这个是margin为0,没有了白边,是整个填充在窗口的





margin不为0
  这个是没有设置margin为0,有白边


  而body标签里的overflow为当内容溢出元素框时发生的事情,官方解释读来晦涩,我直接演示给大家看看hidden(隐藏)和不设置的效果:
设置为hidden
  这个是设置overflow为hidden,超出窗口的部分直接隐藏起来,不会有滚动条出现





不设置
  这个是没有设置overflow为hidden,超出窗口的部分依旧会显示,并通过滚动条来进行查看窗口外的部分。


2.JavaScript Const & split

const width = document.getElementById("myCanvas").width = screen.availWidth; const height = document.getElementById("myCanvas").height = screen.availHeight; const ctx = document.getElementById("myCanvas").getContext("2d"); const arr = Array(Math.ceil(width / 10)).fill(0); const str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0".split(""); 

  const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改;

  但是

  const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。


3.JavaScript function

 function rain() { 
                  ctx.fillStyle = "rgba(0,0,0,0.05)"; ctx.fillRect(0, 0, width, height); ctx.fillStyle = "#0f0"; arr.forEach(function (value, index) { 
                  ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 10, value + 10); arr[index] = value >= height || value > 8888 * Math.random() ? 0 : value + 10; }); } 

  先不看详细的代码,这里是定义了一个方法,用来进行你们眼里看到的“下雨”的操作,其实是每个单独字的闪烁来实现的,事先规划好样式,然后通过arr来调用map方法,实现字符的随机填充以及按照指定的顺序依次闪烁,超过屏幕高度或者达到随机定义的高度便会顶端再次重新闪烁。


4.JavaScript fillStyle

ctx.fillStyle = "rgba(0,0,0,0.05)"; 

  fillStyle 属性设置或返回用于填充绘画的颜色、渐变或模式。rgba指定了rgb颜色以及Alpha透明度。

  • R:红色值。正整数 | 百分数
  • G:绿色值。正整数 | 百分数
  • B:蓝色值。正整数 | 百分数
  • A:Alpha透明度,取值0~1之间。

5.JavaScript fillRect

ctx.fillRect(0, 0, width, height); 

  fillRect() 方法绘制“已填色”的矩形。默认的填充颜色是黑色。(Rect-rectangular矩形)。

context.fillRect(x,y,width,height);

  • x     矩形左上角的 x 坐标。
  • y     矩形左上角的 y 坐标。
  • width    矩形的宽度,以像素计。
  • height   矩形的高度,以像素计。

6.JavaScript fillText

ctx.fillStyle = "#0f0"; ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 10, value + 10); 

  fillText() 方法在画布上绘制填色的文本。文本的默认颜色是黑色。前面已经定义文字为绿色,即代码的颜色;在“道家真言”的代码里还定义了字号和字体:

context.fillText(text,x,y,maxWidth);

  • text  规定在画布上输出的文本。
  • x   开始绘制文本的 x 坐标位置(相对于画布)。
  • y   开始绘制文本的 y 坐标位置(相对于画布)。
ctx.font = "50px 华文行楷"; 

这里的代码

str[Math.floor(Math.random() * str.length)] 

  这一部分是填充的内容,表示随机选取定义的数组中的一个元素,以便出现单个字符。

7.JavaScript forEach

arr.forEach(function (value, index) { 
                     ctx.fillText(str[Math.floor(Math.random() * str.length)], index * 10, value + 10); arr[index] = value >= height || value > 8888 * Math.random() ? 0 : value + 10; } 

  forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。这里给大家提个醒,forEach是不会有返回值的,如果需要接收返回值,就调用.map方法,这里用map当然也可以,但是没必要,不符合规范。

array.forEach(function(currentValue, index, arr), thisValue)

  • function(currentValue, index, arr)   数组中每个元素需要调用的函数。
    1. currentValue         必需。当前元素
    2. index          可选。当前元素的索引值。
    3. arr            可选。当前元素所属的数组对象。
  • thisValue               可选。传递给函数的值一般用 “this” 值。

  由上面可以知道,数组arr通过调用forEach方法,将数组中每个元素在第一行进行打印,然而,forEach方法是没办法改变原数组的,所以才需要第三行代码:

arr[index] = value >= height || value > 8888 * Math.random() ? 0 : value + 10; 

  来手动改变数组元素,如果没有这一行,大家分析分析会发生啥,没错,第一行一直刷新。

8.JavaScript setInterval

setInterval(rain, 30); 

  这是最重要的一行代码,简直就是整个代码块的核心方法,因为只有他出现了,大家看到的才会有这漫天飞舞的字母

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

  直观解释——每30毫秒调用一次rain方法,让雨滴每30毫秒出现一波。时间值大家可以取巧比如想1秒30次,就可以写(1000/30),一秒50次就可以写(1000/50)……

尾声

  通过这些,大家应该能够彻底理解这些代码了,我相信也能自己写出来一份了,俗话说的好,授人以鱼不如授人以渔,我这是鱼给了,网子也给了,还告诉你们哪里有鱼了,同时也希望大家能告诉我我这个网子哪里破了(写的不好的地方),或者也能分享点儿打鱼方法上来,不胜感激!!请不吝赐教????

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214768.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:29
下一篇 2026年3月18日 下午3:30


相关推荐

  • 微星主板没有cpu特征怎么开启vt

    微星主板没有cpu特征怎么开启vt

    2026年3月16日
    1
  • 二进制和十进制的转换机制是什么?_转化成二进制

    二进制和十进制的转换机制是什么?_转化成二进制一、十进制转换成二进制1.1正整数转二进制要点:除二取余,倒序排列,高位补零。方法:将正的十进制数除以二,得到的商再除以二,依次类推直至商为0或1时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零。注:计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时,高位补零。1.2负整数转二进制方法:先将对应的正整数转换成二进制后,对二进制取…

    2022年10月18日
    2
  • 轩辕剑五的乱码问题解决

    轩辕剑五的乱码问题解决轩辕剑5乱码解决方法2007年02月11日星期日10:32(轩辕剑五乱码、轩辕剑乱码转换、轩辕剑5化繁为简)轩辕剑五的乱码问题相当让人头疼,我用过win2k/xp/Vista区域模拟和化繁

    2022年7月3日
    29
  • sigaction检测段错误示例[通俗易懂]

    sigaction检测段错误示例[通俗易懂]#include#include#include#include#include#include#include#defineARRAY_SIZE(a)sizeof(a)/sizeof(a[0])#defineDEBUG#ifdefDEBUG #defineLOG(fmt,args…)printf(“%s():%d”fmt,__FUNC

    2022年5月26日
    42
  • 安装Aras Innovator

    安装Aras Innovator学习任何软件 首先要会安装它 ArasInnovato 运行在 windows 环境下 安装不复杂 首先 要知道运行 ArasInnovato 需要以下几个组件 1 WEB 服务 IIS 2 数据库服务 MS SQL 3 ArasInnovato 服务步骤 1 申请 license 在要安装 ArasInnovato 的电脑上运行 CMD 在命令行里输入 IPCONFIG ALL 找到电脑的 MAC 地址 登录 http www aras com support LicenseKeySe

    2026年3月16日
    2
  • SMTP服务器地址_imap服务器怎么设置

    SMTP服务器地址_imap服务器怎么设置认识SMTP服务器首先要知道SMTP,SMTP是“SimpleMailTransferProtocol”的缩写,即简单电子邮件传输协议,而SMTP服务器就是遵循SMTP协议发送电子邮件的服务器,用来发送或中转用户发出的电子邮件。SMTP协议是一个相对简单、高效的文本协议,使用25端口,属于TCP/IP协议族,可以帮助每台SMTP服务器在发送或中转电子邮件时找到下一个目的地,要为一个给定的域名决定…

    2022年10月3日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号