<!-- html部分 -->
<canvas id="canvas" style="border: 1px solid #cccccc"></canvas>
<!-- js部分 -->
//画布
let c = document.getElementById('canvas') ;
let cxt = c.getContext('2d') ;
//画布的宽高(
最好在行间样式中设置 , 否则会出现模糊等问题
)let w = parseFloat($(window).width());
let h = parseFloat($(window).height()) ;
c.width = w ;
c.height = h ;
//小球的个数
let num = 200 ;
//小球的信息
let data = [] ;
//x轴坐标
let x = [] ;
//(290 138) (2 , 2)
//生成100个不同的数字
function createNum() {
if (x.length > num - 1){
return
}
x.push(parseInt(Math.random()*(w - 10 ) + 2)) ;
x = [... new Set(x)] ;
createNum() ;
}
createNum() ;
//小球的信息
function createNews() {
for (let i = 0 ; i < x.length ; i++){
data.push({
x :x[i], //x轴坐标
y:parseInt(Math.random()*(h - 10 ) + 2) , // y轴坐标
ax:Math.random()*2 - 1, //小球x轴方向的加速度
ay:Math.random()*2 - 1, //小球y轴之间的加速度
r:parseInt(Math.random()*4 + 1) , //小球的半径
})
}
}
createNews() ;
//鼠标移动的点的位置
data.push({
x:9999,
y:9999,
ax:0,
ay:0,
r:4
})
//判断两点之间的距离
function dir(obj1 , obj2) {
//sqrt:平方根 pow(num,2):开平方
return Math.sqrt(Math.pow(obj1.x - obj2.x,2) + Math.pow(obj1.y - obj2.y,2))
}
//生成小球
function createDiv() {
//清除画布
cxt.clearRect(0 , 0 , w ,h) ;
for (let i = 0 ; i < data.length ; i++){
cxt.beginPath() ;
cxt.fillStyle = '#ccc' ;
cxt.lineWidth = 1 ;
cxt.arc(data[i].x , data[i].y , data[i].r , 0 , Math.PI*2) ;
cxt.fill() ;
}
//画线
for (let i = 0 ; i < data.length - 1 ; i++){
for (let j = 1 ; j < data.length ; j++){
if (dir(data[i] , data[j]) < 80){
cxt.beginPath() ;
cxt.strokeStyle = '#ccc' ;
cxt.moveTo(data[i].x , data[i].y) ;
cxt.lineTo(data[j].x , data[j].y) ;
cxt.stroke() ;
}
}
}
}
createDiv() ;
setInterval(function () {
for (let i = 0 ; i < data.length ; i++){
if (data[i].x < data[i].r || data[i].x > w - data[i].r){ //边界的判断
data[i].ax *= -1;
}
if (data[i].y < data[i].r || data[i].y > h - data[i].r){
data[i].ay *= -1;
}
for (let j = 0 ; j < data.length ; j++){
if (i === j){
continue ;
}
//圆心之间的距离和半径的比较
if (dir(data[i] , data[j]) <= (data[i].r + data[j].r)){
data[i].ax *= -1;
data[i].ay *= -1;
}
}
data[i].x += data[i].ax ;
data[i].y += data[i].ay ;
}
createDiv() ;
} , 17) ;
// 生成鼠标移动的点的位置
$(document).mousemove(function (e) {
// 鼠标点的位置
let x = e.clientX ;
let y = e.clientY ;
data[data.length-1].x = x ;
data[data.length-1].y = y ;
})