非常不错的canvas效果,下面是html代码。

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no" />
<title> 似圆非圆,似线非线 </title>
<style>
.stage{position:absolute;left:0;top:0;width:100%;height:100%;background:#000;}
</style>
</head>
<body>
<canvas class="stage"></canvas>
<script>
(function(win,el){
var cvs=document.querySelector(el),
ctx=cvs.getContext("2d"),
width,
height,
mouse={},
scale=1,
min_scale=1,
max_scale=2.5,
isMouseDown=false,
radius=50,
circlesNum=10,
circles=[]; Function.prototype.method=function(k,v){
return this.prototype[k]=v,this;
}; function Circle(x,y,center,radius){
this.x=x;
this.y=y;
this.curX=x;
this.curY=y;
this.center=center;
this.speed=0.01+Math.random()*0.04;
this.angle=0;
this.color="hsl("+Math.random()*360+",100%,50%)";
this.lineWidth=1;
this.targetWidth=5;
this.radius=radius;
} Circle.method("draw",function(ctx,zoom){
var x=this.x,y=this.y;
this.angle+=this.speed; this.curX+=(this.center.x-this.curX)*this.speed;
this.curY+=(this.center.y-this.curY)*this.speed; this.x=this.curX+Math.cos(this.angle)*this.radius*zoom;
this.y=this.curY+Math.sin(this.angle)*this.radius*zoom;
this.lineWidth+=(this.targetWidth-this.lineWidth)*0.05; if(Math.abs(this.targetWidth-this.lineWidth)<0.5)
{
this.targetWidth=1+Math.random()*6;
} ctx.strokeStyle=this.color;
ctx.lineWidth=this.lineWidth; ctx.beginPath();
ctx.moveTo(x,y)
ctx.lineTo(this.x,this.y); ctx.stroke(); }); function init(){
var bound=cvs.getBoundingClientRect(),i=circlesNum,segment=i*10;
cvs.width=width=bound.width;
cvs.height=height=bound.height; ctx.fillStyle="rgba(0,0,0,.05)";
ctx.lineCap="round"; mouse.x=width/2;
mouse.y=height/2; while(i--)
circles[i]=new Circle(0,0,mouse,radius+Math.random()*segment); cvs.addEventListener("mousemove",function(e){
mouse.x=e.clientX;
mouse.y=e.clientY;
},false); cvs.addEventListener("mousedown",function(){
isMouseDown=true;
},false); cvs.addEventListener("mouseup",function(){
isMouseDown=false;
},false);
cvs.addEventListener("mouseout",function(){
isMouseDown=false;
},false); render();
} function render(){
var i=circlesNum;
scale+=isMouseDown?(max_scale-scale)*0.05:(min_scale-scale)*0.05;
ctx.fillRect(0,0,width,height); while(i--)
circles[i].draw(ctx,scale); requestAnimationFrame(render); } init(); })(this,".stage");
</script>
</body>
</html>

最新文章

  1. asterisk简单命令
  2. web 页面上纯js实现按钮倒计数功能
  3. libSVM 简易使用手册
  4. Zookeeper3.4.6部署伪分布集群(Apache)
  5. HDU 5396 Expression(DP+组合数)(详解)
  6. LINQ简明教程:数据排序、分组、过滤
  7. Payssion,海外本地支付_海外本地收款_小语种本地支付_外贸收款_外贸网店收款_欧洲本地支付_俄罗斯本地支付_巴西支付_跨境支付_PAYSSION,让跨境支付更轻松!
  8. localStorage和sessionStorage火狐浏览器和其他高级浏览器的区别
  9. 【PAT_Basic日记】1002. 写出这个数
  10. 在 Arch 下编译 OpenWRT cmcurl 问题与解决方案
  11. 1031: [JSOI2007]字符加密Cipher
  12. 使用Identity Server 4建立Authorization Server (5)
  13. 关系型数据库工作原理-查询优化器(翻译自Coding-Geek文章)
  14. js基础进阶--图片上传时实现本地预览功能的原理
  15. 做一个开源的小程序登录模块组件(token)
  16. bgfx入门练习3——编译自定义Shader
  17. java使用httpclient封装post请求和get的请求
  18. Slave SQL_THREAD如何重放Relay log
  19. asp.net(C#)文件操作
  20. 20155232《网络对抗》 Exp1 PC平台逆向破解(5)M

热门文章

  1. 给一个执行在windows 7和NAT下的VMWARE虚拟机分配固定IP
  2. [Teamcenter 2007 开发实战] 调用web service
  3. git如何从远程非master分支更新到本地对应分支
  4. 13.ng-value
  5. 19. idea 创建多模块依赖Maven项目
  6. MVC页面常用方法
  7. cf 864 F. Cities Excursions
  8. SQL 查找存在某内容的存储过程
  9. [Usaco2009 Feb]Stock Market 股票市场 完全背包
  10. js003-4方向8方向函数