Мышиный параллакс
thisisstudiox.com Построчно из маски →

Параллакс

Мышиный параллакс

Сцена дрейфует за курсором: у каждого элемента своя сила. Движение через лерп, поэтому оно мягкое.

Водите мышью по экрану.

ведите мышью

Код
<section class="hero">
  <div class="bg"   data-m="14">фоновое фото</div>
  <img  class="card" data-m="34" src="a.jpg">
  <img  class="card" data-m="52" src="b.jpg">
  <h1   data-m="8">Заголовок</h1>
</section>

<script>
var mice = [].map.call(document.querySelectorAll("[data-m]"), function (el) {
  return { el: el, k: +el.getAttribute("data-m"), x: 0, y: 0 };
});
var mx = 0, my = 0;
addEventListener("pointermove", function (e) {
  mx = e.clientX / innerWidth - 0.5;    // -0.5 .. 0.5
  my = e.clientY / innerHeight - 0.5;
}, { passive: true });

function loop() {
  mice.forEach(function (m) {
    m.x += (mx * m.k - m.x) * 0.06;     // мягкий лерп
    m.y += (my * m.k - m.y) * 0.06;
    m.el.style.transform = "translate3d(" + m.x + "px," + m.y + "px,0)";
  });
  requestAnimationFrame(loop);
}
if (!matchMedia("(prefers-reduced-motion: reduce)").matches)
  requestAnimationFrame(loop);
</script>
Промпт для ИИ
Добавь в hero-секцию мышиный параллакс как на thisisstudiox.com: фоновое фото и плавающие карточки дрейфуют за курсором, каждый элемент со своей силой в атрибуте data-m (px): фон 12-16, карточки 30-50, заголовок 6-10. Нормализуй позицию курсора к диапазону -0.5..0.5; в rAF-цикле лерпом (фактор 0.06) веди каждый элемент к target = курсор * сила, применяй translate3d. Без transition — только лерп. Отключай при prefers-reduced-motion и на тач-устройствах.