非常不错的canvas效果,线随心动
非常不错的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>
非常不错的canvas效果,线随心动的更多相关文章
- 一个不错的loading效果--IT蓝豹
一个不错的loading效果 介绍:一个不错的loading加载效果,弹性收缩,效果不错,学习android动画的朋友可以下载来研究研究本例子其实由SeekBar实现,由MetaballView,Me ...
- 非常不错的KPTimePicker效果源码
非常不错的KPTimePicker效果源码,实现特殊设计的时间选择器.用户选择时间是通过滑动一个圆环,并且屏幕的颜色会随着时间点的推移变暗或者变亮,喜欢的朋友可以下载研究一下吧. 源码大家可以到源码天 ...
- 兼容IE浏览器的canvas画线和圆圈
1.新建test.html文件,代码如下: <!DOCTYPE html><html><head> <meta charset="utf-8& ...
- 那些不错的 [ Html5 + CSS3 + Canvas ] 效果!
apng制作工具:http://isparta.github.io/how.html apng制作文章:http://isux.tencent.com/introduction-of-apng.htm ...
- canvas 画线
一.canvas是基于状态的绘图环境 1.canvas是基于状态的绘制 context.moveTo(100,100); context.lineTo(700,700); context.lineWi ...
- 知乎背景图 canvas 效果
思路分析: 1.创造一块画布, 2.在画布内随机产生一些小球,小球位置,半径,颜射,大小,速度等都可以随机产生, 3.定义画小球函数与小球移动函数, 4.将每一个小球圆心都与其它小球链接, 5判断每一 ...
- 自定义控件详解(三):Canvas效果变换
Canvas 画布 从前面我们已经知道了 Canvas 类可以绘出 各种形状. 这里学习一下Canvas 类的变换效果(平移,旋转等) 首先需要了解一下Canvas 画布, 我们用Canvas.Dra ...
- canvas绘制线和矩形
###canvas绘制矩形 HTML中的元素canvas只支持一种原生的图形绘制:矩形.所有其他的图形的绘制都至少需要生成一条路径 1.绘制矩形 canvas提供了三种方法绘制矩形: ----> ...
- canvas连线特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 安卓自己定义对话框及The specified child already has a child问题
问题:在android开发过程中,有时会在不同情况下遇到同种问题:The specified child already has a parent.You must call removeView() ...
- MountService整理
刚毕业时第一个接触的模块就是Vold.这个模块尽管小,但深入下去是有一定难度的. 花了点时间又一次整理了下这一块的逻辑,也当温习下这个模块. watermark/2/text/aHR0cDovL2Js ...
- 利用netstat和tasklist查看PC的端口占用情况 及80端口被占用
经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口? 1.Windows平台在windows命令行窗口下执行: E:\oracle\ora92\bin>n ...
- mediawiki使用笔记
https://www.cnblogs.com/ToDoToTry/p/4475067.html
- 异常Exception
try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看 ...
- js实现日期转换方法
//方法1function timeStamp1String(time) { var datetime = new Date(); datetime.setTime(time); var year = ...
- js实现导出数据到excel
来自:http://www.imooc.com/article/13374 //html代码<!DOCTYPE HTML> <html> <head> <ti ...
- window安装MQTT服务器和client
http://activemq.apache.org/apollo/download.html 官方下载地址 MQTT目录: MQTT简单介绍 window安装MQTT服务器和client ja ...
- ES6学习笔记(七)对象的新增方法
1.Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0.J ...
- Hexo High一下以及压缩排版问题
背景介绍 集成Hight一下以及Gulp-html压缩之后出现的问题: High一下功能多次点击,会创建多个Audio对象,导致同时播放多次音乐,重音.解决办法:判断是否添加Audio对象,如果存在则 ...