Частицы-созвездие
canvas-классика Плёночное зерно →

Фоны и графика

Частицы-созвездие

70 точек дрейфуют, между близкими — линии; возле курсора подкрашиваются акцентом.

Поводите мышью по сцене.

созвездие

Код
<canvas class="pts"></canvas>

<script>
var cv = document.querySelector(".pts"), ctx = cv.getContext("2d");
var W = cv.width = cv.offsetWidth, H = cv.height = cv.offsetHeight;
var pts = [];
for (var i = 0; i < 70; i++) pts.push({
  x: Math.random(), y: Math.random(),
  vx: (Math.random() - .5) * .0007, vy: (Math.random() - .5) * .0007 });

(function loop() {
  ctx.clearRect(0, 0, W, H);
  pts.forEach(function (a) {                 // дрейф + отскок от краёв
    a.x += a.vx; a.y += a.vy;
    if (a.x < 0 || a.x > 1) a.vx *= -1;
    if (a.y < 0 || a.y > 1) a.vy *= -1;
  });
  for (var i = 0; i < pts.length; i++) {
    var ax = pts[i].x * W, ay = pts[i].y * H;
    ctx.fillStyle = "rgba(238,241,246,.75)";
    ctx.beginPath(); ctx.arc(ax, ay, 1.6, 0, 7); ctx.fill();
    for (var j = i + 1; j < pts.length; j++) {  // линии между близкими
      var bx = pts[j].x * W, by = pts[j].y * H;
      var d = Math.hypot(ax - bx, ay - by);
      if (d < 110) {
        ctx.strokeStyle = "rgba(238,241,246," + .25 * (1 - d / 110) + ")";
        ctx.beginPath(); ctx.moveTo(ax, ay); ctx.lineTo(bx, by); ctx.stroke();
      }
    }
  }
  requestAnimationFrame(loop);
})();
</script>
Промпт для ИИ
Сделай фон-созвездие на canvas: ~70 точек с медленным дрейфом (скорости ±0.0007 в нормализованных координатах, отскок от краёв); между точками ближе 110px — линии с прозрачностью 0.25*(1-d/110). Точки радиусом 1.6px, светлые на тёмном. Бонус: точки в радиусе 130px от курсора подкрашивать акцентом и увеличивать. Пересчитывай размеры на resize, отключай при prefers-reduced-motion.