canvas动画圆形扩散
2017-06-08 22:52
141 查看
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div id="box" style="width:600px;height:600px;margin:0 auto;border:2px solid #000;background:#000;"></div>
<script type="text/javascript">
var canvasList = document.getElementById('box');
var canvas = document.createElement('canvas');
canvasList.appendChild(canvas);
canvas.width = 600; //
canvas.height = 600;
var context=canvas.getContext("2d");
var width=600,height=600;
var arr = [];
for(var i=0;i<10;i++){
arr.push({x:parseInt(Math.random()*canvas.width),y:parseInt(Math.random()*canvas.height)});
};
var radius=10;
//创建构造函数Circle
function Circle(x,y,radius){
this.xx=x;//在画布内随机生成x值
this.yy=y;
this.radius=radius;
};
Circle.prototype.radiu=function(){
radius += 0.5; //每一帧半径增加0.5
if (this.radius >= 20) {
radius = 10;
};
};
// 绘制圆形的方法
Circle.prototype.paint=function(){
context.beginPath();
context.arc(this.xx,this.yy,10,0,Math.PI*2);
context.fillStyle="rgba(250,250,50,1)";//填充颜色,默认是黑色
context.fill();//画实心圆
context.closePath();
context.lineWidth = 2; //线条宽度
context.strokeStyle = 'rgba(250,250,50,1)'; //颜色
context.stroke();
this.paintkong();
this.paintkong(0);
this.paintkong(10);
this.paintkong(20);
};
Circle.prototype.paintkong=function(num){
context.beginPath();
context.arc(this.xx,this.yy,this.radius+num,0,Math.PI*2);
context.closePath();
context.lineWidth = 1; //线条宽度
context.strokeStyle = 'rgba(250,250,50,1)'; //颜色
context.stroke();
};
// 创建
var newfun = null;
function createCircles(){
for(var j=0;j<arr.length;j++){
newfun = new Circle(arr[j].x,arr[j].y,radius);//调用构造函数
newfun.paint();
};
newfun.radiu();
};
createCircles()
// 创建临时canvas
var backCanvas = document.createElement('canvas'),
backCtx = backCanvas.getContext('2d');
backCanvas.width = width;
backCanvas.height = height;
//设置主canvas的绘制透明度
context.globalAlpha = 0.7;
//显示即将绘制的图像,忽略临时canvas中已存在的图像
backCtx.globalCompositeOperation = 'copy';
var render = function() {
//先将主canvas的图像缓存到临时canvas中
backCtx.drawImage(canvas, 0, 0, width, height);
//清除主canvas上的图像
context.clearRect(0, 0, width, height);
//在主canvas上画新圆
createCircles();
//新圆画完后,再把临时canvas的图像绘制回主canvas中
context.drawImage(backCanvas, 0, 0, width, height);
};
setInterval("render()", 100);
</script>
</body>
</html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div id="box" style="width:600px;height:600px;margin:0 auto;border:2px solid #000;background:#000;"></div>
<script type="text/javascript">
var canvasList = document.getElementById('box');
var canvas = document.createElement('canvas');
canvasList.appendChild(canvas);
canvas.width = 600; //
canvas.height = 600;
var context=canvas.getContext("2d");
var width=600,height=600;
var arr = [];
for(var i=0;i<10;i++){
arr.push({x:parseInt(Math.random()*canvas.width),y:parseInt(Math.random()*canvas.height)});
};
var radius=10;
//创建构造函数Circle
function Circle(x,y,radius){
this.xx=x;//在画布内随机生成x值
this.yy=y;
this.radius=radius;
};
Circle.prototype.radiu=function(){
radius += 0.5; //每一帧半径增加0.5
if (this.radius >= 20) {
radius = 10;
};
};
// 绘制圆形的方法
Circle.prototype.paint=function(){
context.beginPath();
context.arc(this.xx,this.yy,10,0,Math.PI*2);
context.fillStyle="rgba(250,250,50,1)";//填充颜色,默认是黑色
context.fill();//画实心圆
context.closePath();
context.lineWidth = 2; //线条宽度
context.strokeStyle = 'rgba(250,250,50,1)'; //颜色
context.stroke();
this.paintkong();
this.paintkong(0);
this.paintkong(10);
this.paintkong(20);
};
Circle.prototype.paintkong=function(num){
context.beginPath();
context.arc(this.xx,this.yy,this.radius+num,0,Math.PI*2);
context.closePath();
context.lineWidth = 1; //线条宽度
context.strokeStyle = 'rgba(250,250,50,1)'; //颜色
context.stroke();
};
// 创建
var newfun = null;
function createCircles(){
for(var j=0;j<arr.length;j++){
newfun = new Circle(arr[j].x,arr[j].y,radius);//调用构造函数
newfun.paint();
};
newfun.radiu();
};
createCircles()
// 创建临时canvas
var backCanvas = document.createElement('canvas'),
backCtx = backCanvas.getContext('2d');
backCanvas.width = width;
backCanvas.height = height;
//设置主canvas的绘制透明度
context.globalAlpha = 0.7;
//显示即将绘制的图像,忽略临时canvas中已存在的图像
backCtx.globalCompositeOperation = 'copy';
var render = function() {
//先将主canvas的图像缓存到临时canvas中
backCtx.drawImage(canvas, 0, 0, width, height);
//清除主canvas上的图像
context.clearRect(0, 0, width, height);
//在主canvas上画新圆
createCircles();
//新圆画完后,再把临时canvas的图像绘制回主canvas中
context.drawImage(backCanvas, 0, 0, width, height);
};
setInterval("render()", 100);
</script>
</body>
</html>
相关文章推荐
- HTML5 canvas带渐变色的圆形进度条动画
- 使用canvas画的圆形水球波纹带进度条的效果,里面使用的是requestAnimationFrame方法(),所以动画的执行只在区域可见的时候才会执行
- 纯css3圆形从中心向四周扩散动画效果
- 纯css3圆形从中心向四周扩散动画效果
- Android圆形向外扩散颜色渐浅动画
- html5使用canvas画布制作圆形加载动画
- iOS悬浮窗UIBezierPath圆形扩散转场动画
- Android Material Design(6) CircularReveal圆形扩散动画的使用
- 圆形扇形加载动画 canvas
- iOS悬浮窗UIBezierPath圆形扩散转场动画
- 监控鼠标的位置点击实现圆形扩散动画
- canvas圆形扩散
- 详解用CSS3制作圆形滚动进度条动画效果
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf8
- canvas 动画库 CreateJs 之 EaselJS(上篇)
- HTML5 canvas 绘制圆形
- 使用原生JavaScript的Canvas实现拖拽式图形绘制,支持画笔、线条、箭头、三角形、矩形、平行四边形、梯形以及多边形和圆形,不依赖任何库和插件,有演示demo
- 《FLASH CC 2015 CANVAS 中文教程》——1、导出canvas动画,文件结构浅析
- IE 下VML动画的奇怪现象:GWTCanvas基于定时器的图形动画当鼠标移动时停止动画效果(直接用VML写代码效果也一样)