Canvas气泡动画效果和多个球体上下运动(之前的改进)
2017-03-09 19:24
316 查看
<!doctype html>
<head>
<meta charset="UTF-8">
<meta name="Author" content="郭晅自">
<title>canvas多个球体上下运动</title>
</head>
<body>
<canvas id="canvas" width="400px" height="300px"></canvas>
<script>
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var circleMove = {
Time : 20,
STATUS_DOWN : 0,
STATUS_UP : 1,
circles : [],
//初始化
init : function(){
var img = new Image();
img.src="bg.jpg";
setInterval(function(){
ctx.drawImage(img,0,0,400,300);
if(circleMove.Time%0.5 == 0){
circleMove.createCircles();
}
circleMove.paintCircles();
/*如要上下运动效果,解开circleMove.setStatus(); 再把circleMove.changeOpacity();注释掉*/
//circleMove.setStatus();
circleMove.circlesStep();
circleMove.changeOpacity();
circleMove.Time++;
},50);
},
// 定义函数 - 创建圆形对象
createCircles : function(){
var cir = new circle();
this.circles.push(cir);
},
// 定义函数 - 绘制所有圆形
paintCircles : function(){
for(var i=0;i<this.circles.length;i++){
this.circles[i].createCircle();
}
},
// 定义函数 - 控制所有圆形运动
circlesStep : function(){
for(var i=0;i<this.circles.length;i++){
if(this.circles[i].Status == 0){
this.circles[i].moveDown();
}else{
this.circles[i].moveUp();
}
}
},
// 定义函数 - 控制所有球体的透明度
changeOpacity : function(){
for(var i=0;i<this.circles.length;i++){
this.circles[i].inVisible();
}
},
/*设置球体状态,如果在超出画面范围,则向上运动*/
setStatus : function(){
for(var i=0;i<this.circles.length;i++){
if(this.circles[i].y+this.circles[i].r>canvas.height){
this.circles[i].y = canvas.height-this.circles[i].r;
this.circles[i].Status = this.STATUS_UP;
}else if(this.circles[i].y-this.circles[i].r<0){
this.circles[i].y = this.circles[i].r;
this.circles[i].Status = this.STATUS_DOWN;
}
}
}
}
// 定义球体构造函数
function circle(){
this.x = Math.random()*canvas.width;
this.y = -10;
this.r = Math.random()*20+5;
this.Status = 0,
this.red = Math.floor(Math.random()*256)+150;
this.green = 100;
this.blue = 0;
this.opacity = .8;
this.createCircle = function(){
ctx.fillStyle = "rgba("+this.red+","+this.green+","+this.blue+","+this.opacity+")";
ctx.beginPath();
ctx.arc(this.x,this.y,this.r,0,Math.PI*2);
ctx.fill();
}
this.moveDown = function(){
this.y+=10;
}
this.moveUp = function(){
this.y=this.y-10;
}
this.inVisible = function(){
this.opacity=this.opacity-0.05;
}
}
//执行
circleMove.init();
</script>
</body>
</html>
<head>
<meta charset="UTF-8">
<meta name="Author" content="郭晅自">
<title>canvas多个球体上下运动</title>
</head>
<body>
<canvas id="canvas" width="400px" height="300px"></canvas>
<script>
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var circleMove = {
Time : 20,
STATUS_DOWN : 0,
STATUS_UP : 1,
circles : [],
//初始化
init : function(){
var img = new Image();
img.src="bg.jpg";
setInterval(function(){
ctx.drawImage(img,0,0,400,300);
if(circleMove.Time%0.5 == 0){
circleMove.createCircles();
}
circleMove.paintCircles();
/*如要上下运动效果,解开circleMove.setStatus(); 再把circleMove.changeOpacity();注释掉*/
//circleMove.setStatus();
circleMove.circlesStep();
circleMove.changeOpacity();
circleMove.Time++;
},50);
},
// 定义函数 - 创建圆形对象
createCircles : function(){
var cir = new circle();
this.circles.push(cir);
},
// 定义函数 - 绘制所有圆形
paintCircles : function(){
for(var i=0;i<this.circles.length;i++){
this.circles[i].createCircle();
}
},
// 定义函数 - 控制所有圆形运动
circlesStep : function(){
for(var i=0;i<this.circles.length;i++){
if(this.circles[i].Status == 0){
this.circles[i].moveDown();
}else{
this.circles[i].moveUp();
}
}
},
// 定义函数 - 控制所有球体的透明度
changeOpacity : function(){
for(var i=0;i<this.circles.length;i++){
this.circles[i].inVisible();
}
},
/*设置球体状态,如果在超出画面范围,则向上运动*/
setStatus : function(){
for(var i=0;i<this.circles.length;i++){
if(this.circles[i].y+this.circles[i].r>canvas.height){
this.circles[i].y = canvas.height-this.circles[i].r;
this.circles[i].Status = this.STATUS_UP;
}else if(this.circles[i].y-this.circles[i].r<0){
this.circles[i].y = this.circles[i].r;
this.circles[i].Status = this.STATUS_DOWN;
}
}
}
}
// 定义球体构造函数
function circle(){
this.x = Math.random()*canvas.width;
this.y = -10;
this.r = Math.random()*20+5;
this.Status = 0,
this.red = Math.floor(Math.random()*256)+150;
this.green = 100;
this.blue = 0;
this.opacity = .8;
this.createCircle = function(){
ctx.fillStyle = "rgba("+this.red+","+this.green+","+this.blue+","+this.opacity+")";
ctx.beginPath();
ctx.arc(this.x,this.y,this.r,0,Math.PI*2);
ctx.fill();
}
this.moveDown = function(){
this.y+=10;
}
this.moveUp = function(){
this.y=this.y-10;
}
this.inVisible = function(){
this.opacity=this.opacity-0.05;
}
}
//执行
circleMove.init();
</script>
</body>
</html>
相关文章推荐
- 基于canvas实现物理运动效果与动画效果(一)
- 原生javascript实现匀速运动动画效果
- canvas动画之文字粒子效果
- canvas练习,圆形自上向下运动效果实现
- Html5学习--运动且旋转并放大缩小的动画效果
- CodePen 作品秀:Canvas 粒子效果文本动画
- 基于VerticalViewPager的上下滑动,可带动画效果,类似WheelView
- 动画(Animation) 之 (闪烁、左右摇摆、上下晃动等效果)
- 剖析Android动画(图片闪烁、左右摇摆、上下晃动等效果)
- HTML5 Canvas动画效果实现原理
- [js高手之路]html5 canvas动画教程 - 重力、摩擦力、加速、抛物线运动
- AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式
- 用canvas绘制“具有碰撞检测效果的运动五角星”
- 炫丽的倒计时效果Canvas绘图与动画基础
- jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
- AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式
- Android图集的上下左右拖动及动画效果研究
- Android动画(图片闪烁、左右摇摆、上下晃动等效果)
- 使用JS实现气泡跟随鼠标移动的动画效果
- javascript动画效果之匀速运动