Для реализации анимации падения элементов и их перемещения с помощью курсора вам понадобятся знания JavaScript и CSS.
1. Начнем с создания элементов, которые будут анимироваться и перемещаться. Для этого вы можете использовать блоки <div>
или любой другой элемент на ваш выбор. Добавьте им классы и стили, чтобы задать начальное положение и внешний вид элементов.
<style> .draggable { position: absolute; width: 100px; height: 100px; background-color: blue; } </style> <div class="draggable"></div>
2. Добавьте слушателей событий на элементы, чтобы обрабатывать начало перемещения и конец перемещения. Используйте события mousedown
, mousemove
и mouseup
для этого.
const draggableElement = document.querySelector('.draggable'); // Флаг, указывающий на активность перемещения элемента let isDragging = false; // Координаты начала перемещения элемента let startX; let startY; // Событие при нажатии кнопки мыши на элемент draggableElement.addEventListener('mousedown', (event) => { isDragging = true; startX = event.clientX - draggableElement.getBoundingClientRect().left; startY = event.clientY - draggableElement.getBoundingClientRect().top; }); // Событие при перемещении мыши document.addEventListener('mousemove', (event) => { if (!isDragging) return; const dragX = event.clientX - startX; const dragY = event.clientY - startY; // Перемещение элемента в новые координаты draggableElement.style.left = `${dragX}px`; draggableElement.style.top = `${dragY}px`; }); // Событие при отпускании кнопки мыши document.addEventListener('mouseup', () => { isDragging = false; });
3. Добавьте анимацию падения элементов. Для этого вы можете использовать CSS-свойство transform
с помощью функции translateY
и добавить transition-эффект для плавного перемещения. Меняйте значение translateY
в зависимости от времени или других параметров, чтобы создать плавное падение.
.droppable { position: relative; width: 100%; height: 500px; background-color: lightgray; } .falling { transition: transform 1s; }
const droppableArea = document.querySelector('.droppable'); // Получение координат падения элемента function getDropPosition(element) { const dropX = element.getBoundingClientRect().left - droppableArea.getBoundingClientRect().left; const dropY = element.getBoundingClientRect().top - droppableArea.getBoundingClientRect().top; return { x: dropX, y: dropY }; } // Событие при отпускании кнопки мыши над областью document.addEventListener('mouseup', () => { if (!isDragging) return; // Получение координат падения элемента const { x: dropX, y: dropY } = getDropPosition(draggableElement); // Падение элемента draggableElement.classList.add('falling'); draggableElement.style.transform = `translate(${dropX}px, ${dropY}px)`; });
В результате выполнения вышеуказанных шагов, вы должны увидеть следующее:
1. Элемент с классом .draggable
будет перемещаться по экрану, соответствуя перемещению курсора.
2. При отпускании кнопки мыши над областью с классом .droppable
, элемент будет плавно опускаться по координатам, определенным функцией getDropPosition
.
Это основная концепция реализации анимации падения элементов и их перемещения с помощью курсора. Однако, вам может потребоваться дополнительно настроить анимацию, добавить обработчики событий для другой функциональности, например, ограничить перемещение только по одной оси, добавить анимацию при начале перемещения и т.д.