HTML5 Matrix效果实现解析
2013-08-17 19:30
295 查看
今天发现CSDN上有一个一篇文章"很炫的HTML5 Matrix效果".打开来看,demo演示地址.建议用Chrome打开。
效果如下:
![](https://img-blog.csdn.net/20130817192749343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2Ftd2FuZzgyMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
实现代码(我在代码里面嵌入注释,这样比较好读懂):
其实代码draw后,canvas里面N次fillRect, fillText, 不知道JavaScript 对这个内存怎么处理。
我改下代码bug,优化,加上自己的逻辑来实现黑客帝国片头的Matrix效果。So Cool
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/proud.gif)
效果如下:
实现代码(我在代码里面嵌入注释,这样比较好读懂):
<script> var s = window.screen; //得到浏览器宽度和高度大小,还有设置canvas大小。 var width = q.width = s.width; var height = q.height = s.height; //Array(256) 相当于new Array(256),也相当于 [256].JavaScript Object实例化可以省略"new" //join(1),是给数组每个元素插入"1"返回一个字符串 Array(256).join(1)输出为"1111111111111..111",256个1 //split('')把字符串按字符分隔成数组. letters是256个元素为"1"的数组。 //从后面代码我们知道,字符宽度为10,且letters会展示在一行。256*10=2560.屏幕需要2560宽度才会展示完所有的字符 //好的方式是这样的 var letters = Array(width/10+1).join(1).split(''); var letters = Array(256).join(1).split(''); var draw = function () { //.05相当于0.05,是透明度。每一次调用draw都会重画全屏幕,重画次数多了,透明度值越来越高,直到就会全屏黑色 //每次画全屏都会盖在先前的文字上,先前出来的文字会越来越模糊。 q.getContext('2d').fillStyle='rgba(0,0,0,.05)'; q.getContext('2d').fillRect(0,0,width,height); //文字的颜色为绿 q.getContext('2d').fillStyle='#0F0'; //JavaScript Array map方法,y_pos是值,index是数组下标 letters.map(function(y_pos, index){ //fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。 text = String.fromCharCode(3e4+Math.random()*33); //字符宽度为10 x_pos = index * 10; //y_pos为字符,这里自动转化为Number q.getContext('2d').fillText(text, x_pos, y_pos); //整个demo的精髓所在 //letters里面每个字符画的位置相对于上次下降10.下降位置到一定位置会返回到0. //而这个一定位置为"758 + Math.random() * 1e4",随机的。 //所以我们可以看到效果,当字符串第一次到底端的时候,就会有字符先后回到0。参差不齐的下降效果。 //当然这不是真正的下降效果,只是在上次画的基础上下面的位置画面已。仔细看没有掉的感觉。 //这里还有Demo的bug.y_pos是字符串。"1"+10="110". //这样就导致y_pos依次等于"1","110","11010","0","10"...... //应该改为parseInt(y_pos)+10 letters[index] = (y_pos > 758 + Math.random() * 1e4) ? 0 : y_pos + 10; }); }; //每隔33秒画一次 setInterval(draw, 33); </script>
其实代码draw后,canvas里面N次fillRect, fillText, 不知道JavaScript 对这个内存怎么处理。
我改下代码bug,优化,加上自己的逻辑来实现黑客帝国片头的Matrix效果。So Cool
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/proud.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Matrix Canvas</title> </head> <body> <canvas id="q"></canvas> <script> var s = window.screen; var ctx=q.getContext('2d') var width =q.width= s.width; var height =q.height= s.height; var letters = Array(width/10+1).join(1).split(''); var draw = function () { ctx.fillStyle='rgba(0,0,0,.05)'; ctx.fillRect(0,0,width,height); ctx.fillStyle='#0F0'; letters.map(function(y_pos, index){ text = String.fromCharCode(48+Math.random()*2); x_pos = index * 10; ctx.fillText(text, x_pos, y_pos); letters[index] = (y_pos > 758 + Math.random() * 1e4) ? 0 : parseInt(y_pos) + 10; }); }; setInterval(draw, 33); </script> </body> </html>
相关文章推荐
- 在HTML5中怎样实现Canvas阴影效果
- 14个HTML5实现的效果合集
- html5实现无缝滚动的效果
- 哇塞!HTML5 实现的雨滴效果 CSS发抖
- 基于html5实现的图片墙效果
- HTML5实现的Loading缓冲效果
- jQuery+HTML5实现图片上传前预览效果
- HTML5 Canvas动画效果实现原理
- 利用HTML5的画布Canvas实现刮刮卡效果
- ItemDecoration解析(三) 实现stickyHeader效果
- HTML5 简单页面实现时钟效果
- HTML5实现webApp中图片轮播的效果(一)之基本使用
- HTML5 实现Link跳线效果
- 超酷的杂志翻页效果HTML5实现
- HTML5 实现小车动画效果(Canvas/CSS3/JQuery)
- html5实现GIF图效果
- 使用HTML5 details,summary实现,展开,下拉,树的效果
- HTML5实现“摇一摇”效果
- css3-transform-matrix 即矩阵实现物体旋转、缩放、移动效果
- 昂首那瞬间,球已停止转动——HTML5实现3D球效果 .