使用递归函数使用javascript在画布上绘制多色点

使用递归函数使用javascript在画布上绘制多色点,javascript,canvas,Javascript,Canvas,我创建了一个小应用程序来在HTML画布元素上创建点。在这里,我编写了在画布上绘制多色点的代码 我创建了一个按钮来更改点的颜色,另一个按钮来将点排序为一行 一切都很好 “严格使用”; //画布和上下文 var canvas=document.getElementById('canvas'), ctx=canvas.getContext('2d'), //钮扣 randColBtn=document.getElementById('randColBtn'), randPosBtn=document

我创建了一个小应用程序来在HTML画布元素上创建点。在这里,我编写了在画布上绘制多色点的代码

我创建了一个按钮来更改点的颜色,另一个按钮来将点排序为一行

一切都很好

“严格使用”;
//画布和上下文
var canvas=document.getElementById('canvas'),
ctx=canvas.getContext('2d'),
//钮扣
randColBtn=document.getElementById('randColBtn'),
randPosBtn=document.getElementById('randPosBtn'),
sortDotsBtn=document.getElementById('sortDotsBtn'),
//全球的
点=[],
颜色='#aaaaa';
//常数
常数点_半径=20;
//点构造函数
变量点=函数(x,y,c){
这个.x=x;
这个。y=y;
这个颜色=c;
this.draw=函数(){
ctx.fillStyle=this.color;
ctx.beginPath();
ctx.arc(this.x-DOT_半径/2,this.y-DOT_半径/2,DOT_半径,0,2*Math.PI);
ctx.fill();
}
}
//检查鼠标是否在现有点的边界内单击
var isOverlap=函数(d){
对于(变量i=dots.length-1;i>=0;i--){
设归一化后的x=d.x-点[i].x,
归一化y=d.y-点[i].y;
if(-DOT_RADIUS

点播器
#帆布{
边框:薄而实的黑色;
}
随机化颜色
随机化位置
排序点

我试图实现你的想法。您可以调整点的数量和反弹值

// dots qty
var limit = 10;
// random bouncing value
var bouncing = [-100, 100];
var rand = (min, max) => ~~(Math.random() * (max - min + 1)) + min;
// randomize you color 
var randColor = ()=> "rgb(" + ~~(Math.random()*256) + "," + ~~(Math.random()*256) + "," + ~~(Math.random()*256) + ")";

// generate list of random dots
var newDots = [...Array(limit||0)]
    .map((v,i) => new Dot(
         e.clientX + rand.apply(null, bouncing),
         e.clientY + rand.apply(null, bouncing),
         randColor() 
    ))
// draw new dots
newDots.forEach(dot=>dot.draw());
//extend global dots
dots = [...dots, ...newDots];

我试图实现你的想法。您可以调整点的数量和反弹值

// dots qty
var limit = 10;
// random bouncing value
var bouncing = [-100, 100];
var rand = (min, max) => ~~(Math.random() * (max - min + 1)) + min;
// randomize you color 
var randColor = ()=> "rgb(" + ~~(Math.random()*256) + "," + ~~(Math.random()*256) + "," + ~~(Math.random()*256) + ")";

// generate list of random dots
var newDots = [...Array(limit||0)]
    .map((v,i) => new Dot(
         e.clientX + rand.apply(null, bouncing),
         e.clientY + rand.apply(null, bouncing),
         randColor() 
    ))
// draw new dots
newDots.forEach(dot=>dot.draw());
//extend global dots
dots = [...dots, ...newDots];
在这里,请查看以下内容: 我重新组织了您的代码,并创建了一个新函数来生成10个带有随机颜色的随机点

//画布和上下文
var canvas=document.getElementById('canvas'),
ctx=canvas.getContext('2d'),
//钮扣
randColBtn=document.getElementById('randColBtn'),
randPosBtn=document.getElementById('randPosBtn'),
sortDotsBtn=document.getElementById('sortDotsBtn'),
//全球的
点=[],
颜色='#aaaaa';
//常数
常数点_半径=20;
//点构造函数
变量点=函数(x,y,c){
这个.x=x;
这个。y=y;
这个颜色=c;
this.draw=函数(){
ctx.fillStyle=this.color;
ctx.beginPath();
ctx.arc(this.x-DOT_半径/2,this.y-DOT_半径/2,DOT_半径,0,2*Math.PI);
ctx.fill();
}
}
//检查鼠标是否在现有点的边界内单击
var isOverlap=函数(d){
对于(变量i=dots.length-1;i>=0;i--){
设归一化后的x=d.x-点[i].x,
归一化y=d.y-点[i].y;
if(-DOT_RADIUS
#画布{
边框:薄而实的黑色;
}

随机化颜色
随机化位置
排序点
兰德圆点
在这里,查看以下内容: 我重新组织了您的代码,并创建了一个新函数来生成10个带有随机颜色的随机点

//画布和上下文
var canvas=document.getElementById('canvas'),
ctx=canvas.getContext('2d'),
//钮扣