黑客帝国纯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路分支.会签.聚合.多重聚合.退回.传阅.转交,都可以非常方便快捷地实现,管理员 ...
随机推荐
- Linux下查看JDK安装路径
在安装好Git.JDK和jenkins之后,就需要在jenkins中进行对应的设置,比如在全局工具配置模块,需要写入JDK的安装路径. 这篇博客,介绍几种常见的在Linux中查看JDK路径的方法... ...
- 编译安装nginx 1.16
准备源码包,并解压,创建nginx用户 [root@slave-master ~]# tar xf nginx-1.16.0.tar.gz [root@slave-master ~]# useradd ...
- Java poi导出设置 Excel某些单元格不可编辑
小白的总结,大神勿喷:需要转载请说明出处,如果有什么问题,欢迎留言 一.需求: 1.某一列 .某一行或某些单元格不可编辑,其他列可以编辑 二.期间遇到的问题 1.无法设置成不可编辑 2.设置为不可编辑 ...
- collection库更新1.4.0版本
collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本. 这个版本做了几个事情: 增加了三种类 ...
- Groovy获取Bean两种方式(奇淫技巧操作)
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象. 在Groovy ...
- Mysql资料 索引
目录 一.介绍 什么是索引? 为什么要有索引呢? 二.索引的原理 原理 磁盘IO与预读 索引的数据结构 b+树的查找过程 b+树性质 三.索引管理 MySQL的索引分类 各索引应用场景 索引类型 操作 ...
- jenkins集成openldap
参考图片 集成ldap参考链接:https://www.cnblogs.com/mascot1/p/10498513.html
- Excel如何使用vlookup
一.vlookup的语法 VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup]) ①Lookup_value为需要在数据表 ...
- LuoguP1619 解一元二次方程的烦恼 题解
Content 模拟一个系统,给出一个数 \(n\),让你判断是否是素数,如果是合数的话就要质因数分解. 需要注意的几点: 数字超过 \(4\times 10^7\),输出溢出提示. 数字小于 \(2 ...
- 阿里巴巴分布式服务框架HSF
HSF称之为高速服务框架HSF(High-speed Service Framework),是在阿里巴巴广泛使用的分布式RPC服务框架. HSF连通不同的业务系统,解耦系统间的实现依赖.HSF从分布式 ...