闲得蛋疼,JavaScript版本BadApple
参考Vim版本的BadApple改写而成。由于加载数据比较大,可能网速不给力的童鞋效果不太好,多刷新几次就好了,^_^。
运行环境:支持HTML5 Canvas的浏览器。
1. 代码:
$(function() {
var BadApple = {
is_running: false,
data_index: 0,
data_count: 67,
is_loading: {},
progress: $('#progress'),
init: function() {
var me = this,
stage = $('#stage'),
i;
me.data_matrix = [];
for (i = 0; i < me.frame_row; ++i) {
me.data_matrix[i] = Array(me.frame_col).join(' ').split('');
}
me.canvas = stage.get(0);
me.ctx = me.canvas.getContext('2d');
me.canvas.width = me.frame_col * 7;
me.canvas.height = me.frame_row * 16;
me.ctx.fillStyle = 'rgba(0, 0, 0, .05)';
me.ctx.fillRect(0, 0, me.canvas.width, me.canvas.height);
me.ctx.fillStyle = '#7E7E7E';
me.ctx.font = '12px monospace';
},
load_data: function (index, count, fn) {
var me = this;
if (!me.is_loading[index]) {
// mark is loading
me.is_loading[index] = true;
$.get('data/BadApple/data_' + index + '.txt', function (data) {
// finish loading
me.is_loading[index] = null;
me.data_index = index;
data = data.split('\n');
// update progress
me.progress.html((index / me.data_count * 100).toFixed(2) + '%');
if (me.data) {
me.data = me.data.concat(data);
}
// first time
else {
me.data = data;
var rc = data[0].split(' ');
me.frame_row = parseInt(rc[0]);
me.frame_col = parseInt(rc[1]);
$('#div_loading').remove();
me.init();
}
if (count > 1 && index < me.data_count) {
me.load_data(index + 1, count - 1, fn);
}
else {
fn && fn();
}
});
}
},
draw_frame: function(data) {
var me = this, i;
for (i = 0; i < data.length; ++i) {
me.data_matrix[data[i][0] - 1][data[i][1] - 1] = data[i][2];
}http://www.huiyi8.com/jianbihua/
me.ctx.clearRect(0, 0, me.canvas.width, me.canvas.height);
for (i = 0; i < me.frame_row; ++i) {
me.ctx.fillText(me.data_matrix[i].join(''), 4, i * 14 + 16);
}简笔画大全
},
play: function() {
var me = this,
i = 0,
j,
l,
r;
me.is_running = true;
me.interval || (me.interval = setInterval(function () {
if (me.is_running && i < me.data.length) {
l = me.data[++i];
r = [];
if (l && !/^\s*$/.test(l)) {
l = l.split('|');
for (j = 0; j < l.length; ++j) {
r[j] = l[j].split('_');
}
}
me.draw_frame(r);
// load data
if (i + 16 > me.data_index * 16 &&
me.data_index < me.data_count) {
me.load_data(me.data_index + 1, 2);
}
}
}, 70));
},
start: function() {
var me = this;
if (me.data) {
me.play();
}
else {
me.load_data(0, 1, function() {
me.play();
});
}
},
stop: function() {
this.is_running = false;
},
terminal: function () {
this.stop();
clearInterval(this.interval);
}
};
$('#stage').click(function() {
BadApple.is_running ?
BadApple.stop() :
BadApple.start();
}).click();
});
闲得蛋疼,JavaScript版本BadApple的更多相关文章
- 小王子浅读Effective javascript(一)了解javascript版本
哈哈,各位园友新年快乐!愚安好久没在园子里写东西了,这次决定针对javascript做一个系列,叫做<小王子浅读Effective javascript>,主要是按照David Herma ...
- [闲的蛋疼系列]从零开始用TypeScript写React的UI组件(0)-先写一个Button??
0.咸鱼要说的 一入前端深似海,咸鱼入海更加咸. 最近闲的蛋疼,手上年前的事也完成了7788了,借助[PG1]的话来说,我们要keep real. 咸鱼肯定不real 了,因为我们都活在梦里,所以咱们 ...
- 介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现
内表操作是ABAP开发人员几乎在每个ABAP程序里都会遇到的. 看一个例子:有两个行结构不一样的内表,每个内表的行结构有三列,除了name这一列名字一致外,其他两列的名称都不同,下图用红色和蓝色标注出 ...
- 经典算法:快排的Javascript版本
function swap(arr,l,r){ var temp=arr[l]; arr[l]=arr[r]; arr[r]=temp; } function partition(arr,camp,l ...
- JavaScript 版本的 RSA加密库文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 伟大的通信使者——JSON(JavaScript版本)
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表 ...
- Struts2-Ajax整合之纯JavaScript版本
1.Ajax的作用:能够在不重新加载页面的情况下,用异步的方式与后台服务器进行数据交互 2.Struts2-Json的jar包(包含阿里巴巴自己的jar包) commons-beanutils-1.7 ...
- 生日礼物网页Javascript版本与锚点版本
<style> #dv1{ width:60px; height:36px; margin:0 auto; background-color:orange; display:none; } ...
- BF算法和KMP算法(javascript版本)
var str="abcbababcbababcbababcabcbaba";//主串 var ts="bcabcbaba";//子串 function BF( ...
随机推荐
- $config['base_url'] BASE_URL
/*|------------------------------------------------| Base Site URL|--------------------------------- ...
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
前言 java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,从API ...
- 矩形周长(codevs 2149)
题目描述 Description N(N<5000) 张矩形的海报,照片和其他同样形状的图片贴在墙上.它们的边都是垂直的或水平的.每个矩形可以部分或者全部覆盖其他矩形.所有的矩形组成的集合的轮廓 ...
- [NOIP2002] 提高组 洛谷P1031 均分纸牌
题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...
- [CodePlus2017]汀博尔
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 158 Solved: 61[Submit][Status][Discuss] Description ...
- hihoCoder #1014 : Trie树 [ Trie ]
传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互 ...
- Xcode warning: code will never be executed.
在xcode编译的时候,提示了code will never be executed这个警告.百度了一下,大体的意思是,该代码永远不会执行的意思. 比如: - (void)setMyStyle:(Ad ...
- 把excel导入到mysql中
方法很多,不过建议你先看看mysql的开发文档,里面写的很详细的,如果你懒得看,可以看下面的 1.有个软件PHP Excel Parser Pro v4.2可以 2.可将Excel存成csv格式.然后 ...
- 快速让你明白Objective-C的语法(和Java、C++对比)
很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有 ...
- HDU 5883 欧拉路径异或值最大 水题
The Best Path Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...