Как сделать эффект левитирующего блока как в примере
Ответы (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 с помощью него легко сделать такой эффект.
