黑客帝国纯js版
明天就回家过年了,今天没什么心思上班,看了下博客,发现一个黑客帝国额js版本,地址:https://blog.csdn.net/zhongyi_yang/article/details/53841805
然后做了一点封装,这里也贴出来分享一下:
<!DOCTYPE html>
<html>
<head lang="zh-cn">
<meta http-equiv=Content-Type content="text/html; charset=utf-8"> <title>简单的黑客帝国效果</title>
</head> <body style="height:2000px">
<script type="text/javascript">
(function (window) {
var hackerCache = {}; //默认配置
function makeCfg(cfg) {
cfg = cfg || {};
var _cfg = {
canvas: "hacker_matrix" + ((Math.random() * 10000) >> 0),
height: window.innerHeight,
width: window.innerWidth,
fontSize: 16,
fontColor: "#0F0",
fontSyle: "16px arial",
seeds: "0123456789abcdefghijklmnopqrstuvwxyz",
fillStyle: 'rgba(0, 0, 0, 0.05)',//这里只能是rgba格式,好像用ctx.globalAlpha也能做透明度
breaks: 0.98
};
for (var key in _cfg) {
_cfg[key] = cfg[key] || _cfg[key];
} return _cfg;
} function hacker(cfg) {
cfg = makeCfg(cfg); var canvas = document.getElementById(cfg.canvas);
//高度及初始化
var altitudes = [], ctx, texts = cfg.seeds.split(''); if (!canvas) {
canvas = document.createElement("canvas");
canvas.id = cfg.canvas;
canvas.height = cfg.height;
canvas.width = cfg.width;
document.body.appendChild(canvas);
} var cache = hackerCache[canvas.id];
if (!cache) {
ctx = canvas.getContext('2d'); var columns = canvas.width / cfg.fontSize;
for (var i = 0; i < columns; i++) {
altitudes[i] = 1;
}
hackerCache[canvas.id] = {
context: ctx,
altitudes: altitudes,
interval: undefined
} cache = hackerCache[canvas.id];
} altitudes = cache.altitudes;
ctx = cache.context; //逐行输出
function drawLine() {
ctx.fillStyle = cfg.fillStyle;
ctx.fillRect(0, 0, canvas.width, canvas.height); //文字颜色
ctx.fillStyle = cfg.fontColor;
ctx.font = cfg.fontSyle; for (var i = 0; i < altitudes.length; i++) {
var altitude = altitudes[i];
var y = altitude * cfg.fontSize; var text = texts[Math.floor(Math.random() * texts.length)];
ctx.fillText(text, i * cfg.fontSize, y); if (y > canvas.height && Math.random() > cfg.breaks) {
altitude = 0;
} altitudes[i] = ++altitude;
}
} this.start = function () {
if (cache.interval === undefined) {
cache.interval = setInterval(function () {
drawLine();
}, 33);
}
};
this.stop = function () {
cache.interval = cache.interval && clearInterval(cache.interval);
}
} window.hacker = hacker;
})(window); window.onload = function () {
//new hacker().start();
new hacker({ canvas: "canvas1" }).start();
new hacker({ canvas: "canvas2" }).start();
new hacker({ canvas: "canvas3" }).start();
new hacker({ canvas: "canvas4" }).start();
}
</script>
<canvas id="canvas1" width="400" height="400"></canvas>
<canvas id="canvas2" width="400" height="400"></canvas>
<canvas id="canvas3" width="400" height="400"></canvas>
<canvas id="canvas4" width="400" height="400"></canvas>
</body>
</html>
黑客帝国纯js版的更多相关文章
- jQuery下实现等待指定元素加载完毕(可改成纯js版)
http://www.poluoluo.com/jzxy/201307/233374.html 代码如下: jQuery.fn.wait = function (func, times, interv ...
- 纯JS文本在线HTML编辑器KindEditor
KindEditor(http://www.kindsoft.net)是一款比较专业,主流,好用的在线HTML编辑器. 它除了可以将文本进行编辑.将Word中的内容复制进来外,本身还可以拖动缩放(右下 ...
- Ajax,纯Js+Jquery
AJAX:Asynchronous Javascript and xml 异步,Js和Xml 交互式网页开发 不刷新页面,与服务器交互 详情请参照Jquery工具指南用在浏览器端的技术,无刷新,通过X ...
- 纯css和js版下拉菜单
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- javascript日历控件——纯javascript版
平时只有下班时间能code,闲来写了个纯javascript版.引用该calendar.js文件,然后给要设置成日历控件的input的id设置成calendar,该input就会变成日历控件. < ...
- 纯JS实现俄罗斯方块,打造属于你的游戏帝国
纯JS俄罗斯方块,打造属于你的游戏帝国. 本文原始作者博客 http://www.cnblogs.com/toutou 俄罗斯方块(Tetris, 俄文:Тетрис)是一款电视游戏机和掌上游戏机游戏 ...
- Twitter面试题蓄水池蓄水量算法(原创 JS版,以后可能会补上C#的)
之前在群里有人讨论Twitter的面试题,蓄水池蓄水量计算,于是自己写了个JS版的(PS:主要后台代码还要编译,想想还是JS快,于是就使用了JS了.不过算法主要还是思路嘛,而且JS应该都没问题吧^_^ ...
- 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法
前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的不支持多音字,有的不支持声调,有的字典文件太大,还比如有时候我仅仅是需要获取汉字拼音首字母却要引入200kb的字 ...
- F2工作流引擎之-纯JS Web在线可拖拽的流程设计器(八)
Web纯JS流程设计器无需编程,完全是通过鼠标拖.拉.拽的方式来完成,支持串行.并行.分支.异或分支.M取N路分支.会签.聚合.多重聚合.退回.传阅.转交,都可以非常方便快捷地实现,管理员 ...
随机推荐
- velocity示例
创建maven项目 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...
- CentOs 7 yum 安装Nginx
打开官网下载文档:http://nginx.org/en/download.html 2进入操作系统 centOs 7,建立文件夹 nginx ,进入nginx ,拷贝 上图1编辑命令:/etc/yu ...
- Linux(CentOS 7)使用gcc编译c,c++代码
安装gcc: 1.使用 yum -list gcc* 查询 centos 官方gcc的所有包: 可安装的软件包 gcc.x86_64 gcc-c++.x86_64 gcc-gfortran.x86_6 ...
- 解决在进行socket通信时,一端输出流OutputStream不关闭,另一端输入流就接收不到数据
输出的数据需要达到一定的量才会向另一端输出,所以在传输数据的末端添加 \r\n 可以保证不管数据量是多少,都立刻传输到另一端.
- nvm命令
1.安装node nvm install node版本 2.查看已安装版本 nvm list 3.切换node版本 nvm use node版本 4.查看版本 node -v
- 【Matlab】find函数用法
find(A):返回向量中非零元素的位置 注意返回的是位置的脚标 //类似python,还是很好用的 如果是二维矩阵,是先横行后列的 b=find(a),a是一个矩阵,查询非零元素的位置 如果X是一个 ...
- 索引以及Mysql中的索引
一.什么是索引 索引是表的目录,会保存在额外的文件中,针对表中的指定列建立,专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取 ...
- 【Jenkins系列】-备份机制
Jenkins是主从模式,从节点可以做集群.负载,从而实现从节点的高可用,但是主节点是单节点,一旦主节点宕机,会导致Jenkins服务不可用.Jenkins主节点本身是不支持集群的,需要通过其他变通方 ...
- 【划重点】Python matplotlib绘图设置坐标轴的刻度
一.语法简介 plt.xticks(ticks,labels,rotation=30,fontsize=10,color='red',fontweight='bold',backgroundcolor ...
- ctfshow 红包题 武穆遗书
偶然见看到这道题,就下载了看了看.确实是我自己的逆向能力不够,逆不动.但是我似乎找到了非预期... 下载程序,ida打开,发现不对.后来发现是加了upx壳,拿软件去一下.再次ida打开. 其中buff ...