[canvas]通过动态生成像素点做绚丽效果
本例中的粒子就是实实在在的像素,由js代码在canvas上动态生成的像素点!这些像素点通过一个运动方法有规律地动了起来。透过这个思路,我们可以想到很多很炫的效果,但是这个性能有待考察。实验证明,动态控制太多像素点的话绝对会卡的!在做效果方面有经验的朋友,请提出宝贵意见!这个思路走得通么?

<!doctype html>
<html>
<head>
<title>智能粒子</title>
<meta charset='utf-8' />
<style type="text/css">
body{background-color:black;}
#Canvas{margin:50px auto;display:block;border:1px red solid;}
</style>
</head> <body>
<canvas width='300' height='300' id='Canvas'>您的浏览器不支持canvas</canvas>
</body>
<script type="text/javascript">
/*
*用面向对象编程方法实现的粒子
*by @谢帅shawn
*/
//初始化画布
var canvas=document.getElementById('Canvas');
var ctx=canvas.getContext('2d'); /*
*创建一个圆环类Circle,智能圆环的模型
*/
var Circle=function(x,y,speeds){
this.x=x;
this.y=y;
this.speed=speeds;
}
Circle.prototype={
//draw方法,画出像素
draw:function(){ var n=this.y*imgdata.width+this.x;
var i=n*4;
data[i]+=207;
data[i+1]+=14;
data[i+2]+=139;
data[i+3]+=150;
},
//move方法,圆环坐标自加速度,并执行draw方法
move:function(){
this.x+=this.speed.speedX;
this.y+=this.speed.speedY;
this.draw();
}
}
/*
*创建一个Frame帧类,管理所有circles实例,实现画布的渲染
*/
var Frame=function(){
this.circles=[];
this.sint=null;
}
Frame.prototype={
//star开始定时器,循环调用渲染方法
star:function () {
this.lastFrame=(new Date()).getTime();
this.sint=setInterval((function(progra){
return function(){progra.render();}
})(this),30);
},
//render渲染方法
render:function () {
//清除上一帧
ctx.clearRect(0,0,canvas.width,canvas.height);
imgdata=ctx.getImageData(0,0,canvas.width,canvas.height);
data=imgdata.data;
//实时输出帧率
this.nowFrame=(new Date()).getTime();
this.ftp=1000/(this.nowFrame-this.lastFrame);
this.lastFrame=this.nowFrame;
console.log(this.ftp);
//调用每个实例circle的运动方法,监听circle坐标实现碰壁反弹效果
for (i in this.circles) {
this.circles[i].move();
if(this.circles[i].x>canvas.width || this.circles[i].x<0){
this.circles[i].speed.speedX=-this.circles[i].speed.speedX;
//delete this.circles[i];可以实现碰壁消失的效果,delete可删除实例
}
if(this.circles[i].y>canvas.height|| this.circles[i].y<0)
this.circles[i].speed.speedY=-this.circles[i].speed.speedY; }
ctx.putImageData(imgdata,0,0);
}
}
/*
*Main
*/
//创建一个帧实例fra
var fra=new Frame();
//创建100个圆环实例circles【i】
for (var i=0; i<20000; i++) {
//输入speed属性
var speed={
speedX:Math.floor(Math.random()*3),
speedY:Math.floor(Math.random()*10+4)
}
//创建实例
var circle=new Circle(Math.floor(Math.random()*canvas.width/2),Math.floor(Math.random()*canvas.height/2),speed);
fra.circles[i]=circle;
}
//开始渲染
fra.star();
</script>
</html>

[canvas]通过动态生成像素点做绚丽效果的更多相关文章
- 利用jQuery中live为动态生成Dom添加datepicker效果
利用Live属性,focus时重新绑定控件 $(".datepickerDom").live("focus", function () { $(this).da ...
- 巨蟒django之权限7:动态生成一级&&二级菜单
内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...
- js动态生成input指定My97DatePicker时间问题
js生成的input指定onclick时间: 以下1.2为错误: onclick="WdatePicker()"; onclick=WdatePicker(); 若指定到windo ...
- 神奇的canvas——点与线绘制的绚丽动画效果
代码地址如下:http://www.demodashi.com/demo/11636.html 前言 之前在某网站上看到了一个canvas绘制的动画效果,虽然组成的元素很简单,只有点和线,但是视觉效果 ...
- 动态生成二维码并利用canvas合成出一张图片(类似海报、分享页)
在前端开发并打算推广一个APP的时候,推广页是免不了的,而推广页的展示方式一般是给人家一个二维码,让别人自己去安装APP,这样前段任务也达到了,这次写这篇文章的原因主要还是总结一下,其中有很多不完善的 ...
- Canvas之动态波浪效果_陈在真Sunny_chen_新浪博客
Canvas之动态波浪效果_陈在真Sunny_chen_新浪博客 Canvas之动态波浪效果 (2012-04-26 09:04:51) 转载▼
- 动态生成的DOM做点击事件无效
有时候我们的标签都是从后台获取的数据,然后利用JS添加到页面上,当我们写生成的标签的点击事件(click)时没有效果. 例如: <section> 测试动态生成的DOM点击事件 <b ...
- js动态生成canvas
最近看代码发现一个小现象,就是用js动态生成的canvas在浏览器审查元素的时候,发现它没有结束标签,但是不会影响canvas上图形的绘制,同时还有一点就是在动态设置canvas宽度和高度的时候,不要 ...
- 百度echart如何动态生成图表
百度echart如何动态生成图表 一.总结 一句话总结: clear hideloading setOption 主要是下面三行代码: myChart.clear(); //清空画布myChart.h ...
随机推荐
- 【Nutch2.2.1基础教程之3】Nutch2.2.1配置文件
nutch-site.xml 在nutch2.2.1中,有两份配置文件:nutch-default.xml与nutch-site.xml. 其中前者是nutch自带的默认属性,一般情况下不要修改. 如 ...
- 阿里云Centos7使用yum安装MySQL5.6的正确姿势
阿里云Centos7使用yum安装MySQL5.6 阿里云Centos7使用yum安装MySQL5.6 前言:由于某些不可抗力,我要在自己的阿里云服务器上搭建hadoop+hive+mysql+tom ...
- 一个支持实时预览的在线 Markdown 编辑器 - Markdoc
最近组内需要为一些项目和系统写文档,发表在公司内的文档平台上,这个平台并不支持markdown,所以打算做一个在线markdown编辑器,支持实时预览,并且可以很容易的迁移发表到公司文档平台上,所以就 ...
- 在Win8.1(64位)系统上安装Scrapy(python 2.7.7)
为了在win8.1上安装scrapy折腾了好久,最终安装成功,总结步骤如下: 下载安装Visual C++ 2008 redistributables 安装lxml-3.2.4.win-amd64-p ...
- 利用Azure高级存储搭建高性能Linux服务器(2)
我们首先来测试随机写的IOPS,可以看到随机写的IOPS可以达到,顺序写的IOPS可以达到: $ sudo fio -filename=/data/testfile -direct=1 -iodept ...
- 不要怂,就是GAN (生成式对抗网络) (二)
前面我们了解了 GAN 的原理,下面我们就来用 TensorFlow 搭建 GAN(严格说来是 DCGAN,如无特别说明,本系列文章所说的 GAN 均指 DCGAN),如前面所说,GAN 分为有约束条 ...
- List myList=new ArrayList()的理解
ArrayList不是继承List接口,是实现了List接口.你写成ArrayList arrayList = new ArrayList();这样不会有任何问题.和List list = new A ...
- IOS 保存图片至相册
IOS 保存图片至相册 应用中有时我们会有保存图片的需求,如利用UIImagePickerController用IOS设备内置的相机拍照,或是有时我们在应用程序中利用UIKit的 UIGraphi ...
- (转)syslog日志等级
设施.优先级”(facility.priority)设施(facility): kern 0 内核日志消息 user 1 随机的用户日志消息 mail 2 邮件系统日志消息 daemon 3 系统守护 ...
- rsyslog VS syslog-ng,日志记录哪家强?
还有慢慢摸索,NG的MYSQL配置,我始终没搞好. RSYSLOG则比较容易. 另外,也可以每个RSYSLOG直接入库,不需要经过LOG SERVER..如果有一个大内网的话... 配合LOGANAL ...