Как сделать эффект левитирующего блока как в примере

https://itproger.com/ введите сюда описание изображения

как сделать подобный блок на своем сайте ?


Ответы (2 шт):

Автор решения: Август

// самое интересное здесь
const imgs = [...document.querySelectorAll('img')]; // берем все изображения, которые будем паралаксить

document.addEventListener('mousemove', e => { // вешаем обработчик, который следит за перемещением мышки
  const { clientX, clientY } = e; // получаем координаты курсора
  
  imgs.forEach(img => {// для каждого изображения в массиве делаем операцию
    const speed = img.getAttribute('data-speed'); // получаем атрибут speed каждого изображения
    img.style.transform = `translate(${-clientX / speed}px, ${-clientY / speed}px)`; // двигаем изображения с помощью стиля transform
  });
});
/* и здесь ничего важного */
.wrap {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 400px;
  background: url(https://pngimg.com/uploads/blood/blood_PNG6114.png) center no-repeat;
  background-size: contain;
}

img {
  position: relative;
  transition: transform .5s; // кроме этого. задает плавность анимации
  width: 150px;
  height: 150px;
}
<div class="wrap">
  <img
    src="https://s.tcdn.co/0b3/15f/0b315faa-2cfb-3a1f-80c5-458d72948516/3.png"
    data-speed="5"
  />
  <img
    src="https://s.tcdn.co/fcb/7f8/fcb7f8aa-d7a3-31d2-ba8b-ae97676501aa/2.png"
    data-speed="20"
  />
</div>


  • атрибут speed в каждом изображении - это коэфициент скорости движения изображения при паралаксе. он не обязателен. но без него все изображения будут двигаться с одинаковой скоростью
  • всё остальное описание в комментариях кода
  • божми - тоже люди
→ Ссылка
Автор решения: Enokin

На сайте itproger.com используется parallax.js с помощью него легко сделать такой эффект.

→ Ссылка