js实现RainbowBall的面向对象的画布效果
以前在画布上学习的时候,觉得蛮好玩的,写了一个小demo,效果如下:第一次尝试用JS面向对象的方式来写,缺乏经验,也请你多多包涵。
下面是代码的简要介绍:
画布油画:
复制代码代码如下所示:
彩虹球的随机颜色是通过以下两种方法实现的。在JS常用的方法和一些封装(2)中都提到过--随机数生成。
*获得一个随机数为0 ~(闭区间)
* /
功能randomnum(NUM){
返回math.floor(Math.random()*(数+ 1));
};
*获得随机颜色(支持任何浏览器)
* /
功能randomcolor16(){
/ / 0-255
randomnum VAR r(255),ToString(16);
var g = randomnum(255),ToString(16);
var b = randomnum(255),ToString(16);
255的数目被转换为十六。
如果(r.length<2)r =0+ R;
如果(g.length<2)G =0+ g;
如果(b.length<2)B =0+ B;
返回#+ R+G+B;
};
当我单击时,我随机地在矩形区域中产生不同颜色的彩虹球。彩虹球的位置也是随机的。
*
*获得一系列随机数(闭合区间)
* /
功能randomrange(开始、结束){
返回math.floor(Math.random()*(开始+ 1))+开始;
};
接下来是彩虹球的类,它是用面向对象完成的。
彩虹球类
Var(colorball =功能){ }
colorball.prototype.left = 0; / / X轴
colorball.prototype.top = 0; / / Y轴
colorball。原型。R = 10; / /半径
在这种情况下,鼠标相当于彩虹球枪,我们也用面向对象的思想来设计它:
/ / RainbowBrush彩虹喷枪
RainbowBrush =函数(){ }
球阵的生产方法
rainbowbrush.prototype.getballs =功能(NUM){
无功colorballs = { };
对于(var i = 0;i <数字;i + +){
VaR球=新colorball();
ColorBalls.push(球);
}
返回colorballs;
}
/ /喷刷彩虹球
RainbowBrush.prototype.brush =功能(上下文,球,x,y){
balls.foreach(功能(balliem){)
balliem。x = randomrange(X 6,X 6);
BallIem。Y = randomrange(Y 6、Y + 6);
balliem R = 5;
Context.beginPath();
背景。fillStyle = randomcolor16();
context.arc(balliem。X,Y,balliem。balliem。R,0、数学。π×2);
Context.fill();
})
}
它有两种方法,一种是制作彩虹球,另一种是喷彩虹球。
本案的主要逻辑如下:
var RainbowBrush =新(RainbowBrush); / /初始化彩虹球枪
VaR球= rainbowbrush.getballs(1);
当鼠标被按下时
canvasdom.onmousedown =函数(){
var标志=真;
canvasdom.onmousemove =功能(e){
var x = e.clientx;
var y = e.clienty;
如果(旗)rainbowbrush.brush(上下文,球,x,y);
}
canvasdom.onmouseup =函数(){
标志=假;
}
}
案件的全部代码:
彩虹球枪
*获得一个随机数为0 ~(闭区间)
* /
功能randomnum(NUM){
返回math.floor(Math.random()*(数+ 1));
};
*
*获得一系列随机数(闭合区间)
* /
功能randomrange(开始、结束){
返回math.floor(Math.random()*(开始+ 1))+开始;
};
*获得随机颜色(支持任何浏览器)
* /
功能randomcolor16(){
/ / 0-255
randomnum VAR r(255),ToString(16);
var g = randomnum(255),ToString(16);
var b = randomnum(255),ToString(16);
255的数目被转换为十六。
如果(r.length<2)r =0+ R;
如果(g.length<2)G =0+ g;
If (b.length<2) B = 0 +b;
返回#+ R+G+B;
};
无功canvasdom = document.getelementbyid('canvas);
VaR上下文= canvasdom.getcontext(二维的);
VaR最大= 1050;
VaR最大高度= 500;
彩虹球类
Var(colorball =功能){ }
colorball.prototype.left = 0; / / X轴
colorball.prototype.top = 0; / / Y轴
colorball。原型。R = 10; / /半径
/ / RainbowBrush彩虹喷枪
RainbowBrush =函数(){ }
球阵的生产方法
rainbowbrush.prototype.getballs =功能(NUM){
无功colorballs = { };
对于(var i = 0;i <数字;i + +){
VaR球=新colorball();
ColorBalls.push(球);
}
返回colorballs;
}
/ /喷刷彩虹球
RainbowBrush.prototype.brush =功能(上下文,球,x,y){
balls.foreach(功能(balliem){)
balliem。x = randomrange(X 6,X 6);
BallIem。Y = randomrange(Y 6、Y + 6);
balliem R = 5;
Context.beginPath();
背景。fillStyle = randomcolor16();
context.arc(balliem。X,Y,balliem。balliem。R,0、数学。π×2);
Context.fill();
})
}
var RainbowBrush =新(RainbowBrush); / /初始化彩虹球枪
VaR球= rainbowbrush.getballs(1);
当鼠标被按下时
canvasdom.onmousedown =函数(){
var标志=真;
canvasdom.onmousemove =功能(e){
var x = e.clientx;
var y = e.clienty;
如果(旗)rainbowbrush.brush(上下文,球,x,y);
}
canvasdom.onmouseup =函数(){
标志=假;
}
}
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。