console
const dotsNum = 10000;
var dots = [];
var mouseX = 0, mouseY = 0;
var ak = 50000;
var vMax = 15;
var dMin = 30;
var colorList = [ '#FC71AB','#FF8093','#FF9A7B','#FFB869','#FFD863','#F9F871']
Create();
requestAnimationFrame(Update);
document.addEventListener('mousemove', event => {
mouseX = event.clientX;
mouseY = event.clientY;
})
var t1 = 0;
function Update() {
var t2 = Date.now();
var ctx = document.querySelector('canvas').getContext('2d');
ctx.clearRect(0,0,1000,1000);
dots.forEach(dot => {
var rr = (mouseX - dot.pX) * (mouseX - dot.pX) +
(mouseY - dot.pY) * (mouseY - dot.pY);
rr = Math.max(dMin * dMin, rr);
var aX = ak / (rr * (mouseX - dot.pX) / Math.abs(mouseX - dot.pX));
var aY = ak / (rr * (mouseY - dot.pY) / Math.abs(mouseY - dot.pY));
dot.vX += aX;
dot.vY += aY;
dot.vX = Math.max(-vMax, Math.min(vMax, dot.vX));
dot.vY = Math.max(-vMax, Math.min(vMax, dot.vY));
dot.pX += dot.vX;
dot.pY += dot.vY;
ctx.fillStyle = colorList[Random(0,colorList.length+1)];
ctx.beginPath();
ctx.arc(dot.pX,dot.pY, 2, 0, 2 * Math.PI);
ctx.fill();
})
requestAnimationFrame(Update);
t1 = Date.now();
}
class Dot {
Dot(x, y) {
this.pX = x;
this.pY = y;
}
Dot() { }
}
function Create() {
for (i = 0; i < dotsNum; i++) {
var dot = {};
dots.push(dot);
dot.pX = Random(0, 300);
dot.pY = Random(0, 300);
dot.vX = 0;
dot.vY = 0;
}
}
function Random(a, b) {
return Math.floor(Math.random() * (b - a + 1)) + a;
}
<body>
<canvas width="3000px" height="2000px">
</canvas>
</body>
canas{
border: 3px;
height: 600px;
width: 80%;
}
.dot{
background-color: white;
width: 2px;
height: 2px;
position: absolute;
}