const dotsNum = 1000;
var dots = [];
var mouseX = 0, mouseY = 0;
var ak = 50000; //引力常数
var vMax = 15; //最大速度
var dMin = 30; //最小间隔中心距离
var colorList = ['#FC71AB', '#FF8093', '#FF9A7B', '#FFB869', '#FFD863', '#F9F871']
var workerNum = 5;
var workerList = [];
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);
var completeNum = 0;
workerList.forEach(w => {
w.onmessage(e => {
console.log(e);
completeNum++;
console.log(6666);
//ctx.drawImage(e.data.img);
})
w.postMessage({
msg: 'run',
mouseX: mouseX,
mouseY: mouseY
})
})
//console.log( workerList)
while (completeNum < workerNum) {
//console.log(completeNum);
}
/*dots.forEach(dot => {
var rr = (mouseX - dot.pX) * (mouseX - dot.pX) + //r的平方
(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));
//console.log(aX+" "+aY + "|| "+dot.vX+'. '+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);
//console.log(Date.now() - t2, t2 - t1);
t1 = Date.now();
}
function Create() {
for (i = 0; i < workerNum; i++) {
var workerDotList = [];
for (j = 0; j < dotsNum / workerNum; j++) {
var dot = {};
dots.push(dot);
workerDotList.push(dot);
dot.pX = Random(0, 300);
dot.pY = Random(0, 300);
dot.vX = 0;
dot.vY = 0;
dot.color = colorList[Random(0, colorList.length + 1)];
}
var worker = new Worker('http://jsrun.net/Xu5Kp.js');
//console.log(worker);
worker.postMessage({
msg: 'create',
w: {
ak: ak,
dMin: dMin,
vMax: vMax
}
});
}
}
function Random(a, b) { //包括a,b
return Math.floor(Math.random() * (b - a + 1)) + a;
}
<body>
<canvas width="2000px" height="2000px">
</canvas>
</body>
canas{
border: 3px;
height: 600px;
width: 80%;
}
.dot{
background-color: white;
width: 2px;
height: 2px;
position: absolute;
//box-shadow: 1px 1px 3px 1px
}